二叉树前序中序后序

二叉树

  前序遍历:先输出父节点,再遍历左子树和右子树

  中序遍历:先输出左子树,再遍历父节点,最后为右子树

  后序遍历:先输出左子树,再遍历右子树,最后为父节点

小结:看输出父节点的顺序,就确定是前序还是中序后序

遍历步骤:

  1、创建一个二叉树

  2、前序遍历:

    2.1  先输出当前节点(根节点)

    2.2  如果左子节点不为空,则递归继续前序遍历

    2.3  如果右子节点不为空,则递归继续前序遍历

  3、 中序遍历:

    3.1  如果当前节点的左子节点不为空,则递归中序遍历

    3.2  输出当前节点

    3.3  如果当前节点的右子节点不为空,则递归中序遍历

  4、后序遍历:

    4.1  如果当前节点的左字节点不为空,则递归后序遍历

    4.2  如果当前节点的右子节点不为空,则递归后序遍历

    4.3  输出当前节点

  1 public class BinaryTreeDemo {
  2     public static void main(String[] args) {
  3         //先需要创建一棵二叉树
  4         BinaryTree binaryTree = new BinaryTree();
  5         EmpNode root = new EmpNode(1, "aa");
  6         EmpNode emp2 = new EmpNode(2, "bb");
  7         EmpNode emp3 = new EmpNode(3, "cc");
  8         EmpNode emp4 = new EmpNode(4, "dd");
  9         EmpNode emp5 = new EmpNode(5, "ee");
 10 
 11         //手动创建二叉树,后面学习递归的方式创建二叉树
 12         root.setLeft(emp2);
 13         root.setRight(emp3);
 14         emp3.setRight(emp4);
 15         emp3.setLeft(emp5);
 16 
 17         //测试
 18         System.out.println("前序遍历");
 19         binaryTree.setRoot(root);
 20         binaryTree.preOrder();
 21 
 22         System.out.println("中序遍历");
 23         binaryTree.setRoot(root);
 24         binaryTree.infixOrder();
 25 
 26 
 27         System.out.println("后序遍历");
 28         binaryTree.setRoot(root);
 29         binaryTree.postOrder();
 30 
 31 
 32     }
 33 
 34 }
 35 
 36 //定义一个BinaryTree
 37 class BinaryTree{
 38     private  EmpNode root;
 39     public void setRoot(EmpNode root){
 40         this.root = root;
 41     }
 42     //前序遍历
 43     public void preOrder(){
 44         if (this.root != null){
 45             this.root.preOrder();
 46         }else{
 47             System.out.println("二叉树为空,无法遍历");
 48         }
 49     }
 50 
 51     //中序遍历
 52     public void infixOrder(){
 53         if (this.root != null){
 54             this.root.infixOrder();
 55         }else{
 56             System.out.println("二叉树为空,无法遍历");
 57         }
 58     }
 59 
 60     //后序遍历
 61     public void postOrder(){
 62         if (this.root != null){
 63             this.root.postOrder();
 64         }else{
 65             System.out.println("二叉树为空,无法遍历");
 66         }
 67     }
 68 }
 69 
 70 //先创建HeroNode
 71 class EmpNode{
 72     private int no;
 73     private String name;
 74     private EmpNode left;//默认为null
 75     private EmpNode right;//默认为null
 76 
 77     public EmpNode(int no, String name) {
 78         this.no = no;
 79         this.name = name;
 80     }
 81 
 82     public int getNo() {
 83         return no;
 84     }
 85 
 86     public void setNo(int no) {
 87         this.no = no;
 88     }
 89 
 90     public String getName() {
 91         return name;
 92     }
 93 
 94     public void setName(String name) {
 95         this.name = name;
 96     }
 97 
 98     public EmpNode getLeft() {
 99         return left;
100     }
101 
102     public void setLeft(EmpNode left) {
103         this.left = left;
104     }
105 
106     public EmpNode getRight() {
107         return right;
108     }
109 
110     public void setRight(EmpNode right) {
111         this.right = right;
112     }
113 
114     @Override
115     public String toString() {
116         return "EmpNode{" +
117                 "no=" + no +
118                 ", name='" + name + '\'' +
119                 '}';
120     }
121     //编写前序遍历方法
122 
123     public void preOrder(){
124         System.out.println(this);//先输出父节点
125         //递归向左子树前序遍历
126         if (this.left!=null){
127             this.left.preOrder();
128         }
129         //递归向右子树前序遍历
130         if (this.right != null){
131             this.right.preOrder();
132         }
133 
134     }
135     //编写中序遍历方法
136     public void infixOrder(){
137         //递归向左子树中序遍历
138         if (this.left != null){
139             this.left.infixOrder();//2,1,3,4
140         }
141         //输出父节点
142         System.out.println(this);
143         //递归向右子树中序遍历
144         if (this.right != null){
145             this.right.infixOrder();
146         }
147     }
148 
149     //编写后序遍历方法
150     public void postOrder(){
151         if (this.left != null){
152             this.left.postOrder();
153         }
154         if (this.right != null){
155             this.right.postOrder();
156         }
157         System.out.println(this);
158     }
159 }

 

posted @ 2022-04-02 16:40  doremi429  阅读(461)  评论(0编辑  收藏  举报