1.先序遍历
- 访问根结点
- 按先序遍历规则遍历左子树
- 按先序遍历规则遍历右子树
2.中序遍历
- 按中序遍历规则遍历左子树
- 访问根节点
- 按中序遍历规则遍历右子树
3.后序遍历
- 按后序遍历规则遍历左子树
- 按后序遍历规则遍历右子树
- 访问根节点
代码如下:
public class Node {
char val;
Node left=null;
Node right=null;
Node(char val){
this.val=val;
}
}
import java.util.ArrayList;
import java.util.List;
public class Solution {
private static Node bulidTree() {//构建一棵树
Node a = new Node('A');
Node b = new Node('B');
Node c = new Node('C');
Node d = new Node('D');
Node e = new Node('E');
Node f = new Node('F');
Node g = new Node('G');
Node h = new Node('H');
a.left = b;
a.right = c;
b.left = d;
b.right = e;
c.left = f;
c.right = g;
d.left = null;
d.right = null;
e.left = null;
e.right = h;
f.left = null;
f.right = null;
g.left = null;
g.right = null;
h.left = null;
h.right = null;
return a;
}
private static List<Character> preOrder(Node root){
if(root==null){
return new ArrayList<>();
}
List<Character> list=new ArrayList<>();// private List<Integer> list;
List<Character> leftPreOrder=preOrder(root.left);
List<Character> rightPreOrder=preOrder(root.right);
list.add(root.val);
list.addAll(leftPreOrder);
list.addAll(rightPreOrder);
return list;
}
//【前序遍历】
private static void preOrderTraversal(Node root) {
//前序遍历:根+左子树+右子树
if(root==null){
return;
}
System.out.println(root.val);
preOrderTraversal(root.left);
preOrderTraversal(root.right);
}
//【中序遍历】
private static void inOrderTraversal(Node root){
//中序遍历:左子树+根+右子树
if(root==null){
return;
}
inOrderTraversal(root.left);
System.out.println(root.val);
inOrderTraversal(root.right);
}
private static void postOrderTraversal(Node root){
//后序遍历:左子树+右子树+根
if(root==null){
return;
}
postOrderTraversal(root.left);
postOrderTraversal(root.right);
System.out.println(root.val);
}
public static void main (String[] args){
Node root=bulidTree();
System.out.println("前序遍历");
preOrderTraversal(root);
System.out.println("中序遍历");
inOrderTraversal(root);
System.out.println("后序遍历");
postOrderTraversal(root);
}
}