二叉树——中序遍历的递归与非递归算法

中序遍历按照“左孩子-根结点-右孩子”的顺序进行访问。

  1. 递归遍历
   /**
    * 中序遍历
    * @param node
    */
   public static void inOrderTraverse(Node node) {
       if (node == null) return;
       inOrderTraverse(node.leftNode);
       System.out.print(node.data + "\t");
       inOrderTraverse(node.rightNode);
   }
  1. 非递归遍历
  1. 若其左孩子不为空,则将P入栈并将P的左孩子置为当前的P,然后对当前结点P再进行相同的处理;
  2. 若其左孩子为空,则取栈顶元素并进行出栈操作,访问该栈顶结点,然后将当前的P置为栈顶结点的右孩子;
  3. 直到P为NULL并且栈为空则遍历结束。
   public static void nonInOrder(Node root) {
       Stack stack = new Stack();
       while(root != null || !stack.isEmpty()) {
           if (root != null) {
               stack.push(root);
               root = root.leftNode;
           } else {
               root = stack.pop();
               System.out.print(root.data + "\t");
               root = root.rightNode;
           }
       }
   }

你可能感兴趣的:(二叉树——中序遍历的递归与非递归算法)