其中先序、中序、后续遍历都是 深度优先遍历
先序遍历:顺序输出:根结点->左节点->右节点 (用根节点不太准确 改为父节点可能更好 )
中序遍历:左节点->根节点->右结点
后续遍历:左、右、根 根结点在哪就是什么遍历
以中序遍历为例(中序遍历输出的是一个升序排序 因为左孩子的值小嘛 父节点老二 右孩子的值最大)
public void put(TreeNode node) {//中序遍历
if(node==null) {//可以不写 因为空的时候就不输出了
return;
}
if(node!=null) {
//System.out.print(node.value+", ");输出放前面就是前序遍历
put(node.left);
System.out.print(node.value+", ");//中序遍历
put(node.right);
//System.out.print(node.value+", ");//后续遍历
}
}
很简单的 这是不加任何函数的时候 树的管理类 、需要什么操作 把 函数加进去就行
public class BianryTree {
public TreeNode root;
}
广度优先遍历 需要导入一个 以链表形式存储的泛型队列 LinkedList 的包
import java.util.LinkedList;
广度优先遍历 就是把每一层的结点都输出 再去输出下一层,
借助了队列的先进先出来实现 核心思想就是 把结点压入栈 如果左右孩子不为空 压入栈 出栈 直到队列为空
public void Order() {//广度优先遍历 借助队列 jdk里面的含有的LinkedList<E>类
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);//根节点入栈
TreeNode node;
while(!queue.isEmpty()) {
node=queue.pop();//对列最前面的元素出栈
System.out.print(node.value);
if(node.left!=null) {
queue.add(node.left);//左孩子入栈
}
if(node.right!=null) {
queue.add(node.right);//有孩子入栈
}
}
}