美文网首页
二叉树遍历

二叉树遍历

作者: 雨打空城 | 来源:发表于2022-01-17 22:40 被阅读0次

请递归,非递归方式分别前序遍历,中序遍历,后续遍历二叉树

public class TraversalTree{
    public static class Node {
        public int value;
        public Node left;
        public Node right;
    }
// 前序递归
public static void preOrderRecur(Node head) {
    if (head == null) {
        return;
    }

    System.out.print(head.value + " ");
    preOrderRecur(head.left);
    preOrderRecur(head.right);
}
//中序递归
public static void inOrderRecur(Node head) {
    if (head == null) {
        return;
    }

    inOrderRecur(head.left);
    System.out.println(head.value + " ");
    inOrderRecur(head.right);
}
//后序递归
public static void posOrderRecur(Node head) {
      if (head == null) {
          return;
      }
      posOrderRecur(head.left);
      System.out.println(head.value + " ");
      posOrderRecur(head.right);
  }
  
//非递归前序遍历   
public static void preOrderUnRecur(Node head) {
        if (head == null) {
            return;
        }
    
        Stack<Node> stack = new Stack<Node>();
        stack.push(head);
        while(!stack.isEmpty()) {
            Node node = stack.pop();
            System.out.println(node.value + " ");
            if (node.left != null) {
                node.push(node.left);
            }
    
            if (node.right != null) {
                node.push(node.right);
            }
        }
    }
//非递归中序遍历   
public static void inOrderUnRecur(Node head) {
        if (head == null) {
            return;
        }
    
        Stack<Node> stack = new Stack<Node>();
        while(!stack.isEmpty() || head != null) {
            if (head != null) {
                stack.push(head);
                head = head.left;
            } else {
                head = stack.pop();
                System.out.println(head.value + " ");
                head = head.right;
            }
        }   
    }
//非递归后续遍历
public static void postOrderUnRecur(Node head) {
       if (head != null) {
           Stack<Node> s1 = new Stack<Node>();
           Stack<Node> s2 = new Stack<Node>();
           s1.push(head);
           while(!s1.isEmpty()) {
               head = s1.pop();
               s2.push(head);
               if (head.left != null) {
                   s1.push(head.left);
               } 
               if (head.right != null) {
                   s1.push(head.right);
               }
           }
   
           while(!s2.isEmpty()) {
               System.out.println(s2.pop().value + " ");
           }
       }
   }
}

相关文章

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 关于二叉树的算法题

    前序遍历中序遍历后序遍历判断是否是平衡二叉树判断是否是对称二叉树判断二叉树高度按照层遍历二叉树判断二叉树宽度

  • 二叉树遍历

    二叉树 二叉树的存储结构 前序遍历 中序遍历 后序遍历 遍历代码 反转二叉树 深入学习二叉树 二叉树-你必须要懂!...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 二叉树三种遍历Swift代码实现

    二叉树的三种遍历 二叉树 前序遍历 中序遍历 后序遍历 另外 不得不说,得到二叉树的前序遍历和中序遍历的结果或者后...

  • 二叉树的遍历

    二叉树的遍历 二叉树遍历 分为前序遍历、中序遍历和后序遍历。 前序遍历 (DLR) 先访问根节点,然后前序遍历左子...

  • 前端二叉树

    (一)构造二叉树 (二)中序遍历 (三)前序遍历 前序遍历可以复制二叉树,效率比重新构造二叉树高 (四)后序遍历 ...

  • 数据结构:树的实现和遍历(c++)

    (一)二叉树的遍历——递归实现 二叉树常见的遍历方式分为前序遍历、中序遍历和后序遍历。 1 前序遍历 前序遍历也叫...

  • leetcode 144 145 94

    二叉树遍历 前序遍历 中序遍历 后序遍历

网友评论

      本文标题:二叉树遍历

      本文链接:https://www.haomeiwen.com/subject/lpyhhrtx.html