예제 #1
0
 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());
         }
     }
 }
예제 #2
0
 /// <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);
     }
 }
예제 #3
0
    /// <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);
            }
        }
    }
예제 #4
0
    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;
            }
        }
    }
예제 #5
0
    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);
            }
        }
    }