public static void PostOrderTraversal_Iteration(TreeNode <T> head, TreeTravelCallback callback) { if (head != null) { Stack <TreeNode <T> > s1 = new Stack <TreeNode <T> >(); Stack <TreeNode <T> > s2 = new Stack <TreeNode <T> >(); s1.Push(head); while (s1.Count != 0) { head = s1.Pop(); s2.Push(head); if (head.m_left != null) { s1.Push(head.m_left); } if (head.m_right != null) { s1.Push(head.m_right); } } while (s2.Count != 0) { callback(s2.Pop()); } } }
/// <summary> /// 先序遍历 /// </summary> public static void PreOrderTraversal_Recursion(TreeNode <T> node, TreeTravelCallback callback) { callback(node); if (node.m_left != null) { PreOrderTraversal_Recursion(node.m_left, callback); } if (node.m_right != null) { PreOrderTraversal_Recursion(node.m_right, callback); } }
/// <summary> /// 层序遍历 /// </summary> public static void LayerOrderTraversal_Iteration(TreeNode <T> node, TreeTravelCallback callback) { Queue <TreeNode <T> > queue = new Queue <TreeNode <T> >(); queue.Enqueue(node); while (queue.Count != 0) { TreeNode <T> front = queue.Dequeue(); callback(front); if (front.m_left != null) { queue.Enqueue(front.m_left); } if (front.m_right != null) { queue.Enqueue(front.m_right); } } }
public static void InOrderTraversal_Iteration(TreeNode <T> node, TreeTravelCallback callback) { Stack <TreeNode <T> > stack = new Stack <TreeNode <T> >(); while (stack.Count != 0 || node != null) { if (node != null) { stack.Push(node); node = node.m_left; } else { node = stack.Pop(); callback(node); node = node.m_right; } } }
public static void PreOrderTraversal_Iteration(TreeNode <T> node, TreeTravelCallback callback) { Stack <TreeNode <T> > stack = new Stack <TreeNode <T> >(); stack.Push(node); while (stack.Count != 0) { TreeNode <T> first = stack.Pop(); callback(first); if (first.m_right != null) { stack.Push(first.m_right); } if (first.m_left != null) { stack.Push(first.m_left); } } }