1.初始化节点:
static class TreeNode{
int value;
TreeNode left;
TreeNode right;
public TreeNode(int value){
this.value=value;
}
}
public static TreeNode initTree() {
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
TreeNode node8 = new TreeNode(8);
TreeNode node9 = new TreeNode(9);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
node3.left = node6;
node3.right = node7;
node5.right = node8;
node7.left = node9;
return node1;
}
2.广度优先遍历:
对于广度优先遍历,通过队列这个数据结构可以实现,如下图所示,上面的一行是每次循环队列中的元素,下面的一行是每次遍历的元素。
public static void levelOrderTree(TreeNode root){
ArrayDeque<TreeNode> queue=new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()){
TreeNode node=queue.remove();
System.out.print(node.value+" ");
//从左到右
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
System.out.println("\n");
}
3.深度优先遍历:
上面一行是栈每次循环时保留的数据,每次读只能从最顶端pop()
public static void depthOrderTree(TreeNode root){
Stack<TreeNode> stack=new Stack<>();
stack.push(root);
while (!stack.isEmpty()){
TreeNode node= stack.pop();
System.out.println(node.value+" ");
//从右到左
if(node.right!=null){
stack.push(node.right);
}
if(node.left!=null){
stack.push(node.left);
}
}
System.out.println();
}