其中先序、中序、后续遍历都是 深度优先遍历
先序遍历:顺序输出:根结点->左节点->右节点 (用根节点不太准确 改为父节点可能更好 )
中序遍历:左节点->根节点->右结点
后续遍历:左、右、根 根结点在哪就是什么遍历
以中序遍历为例(中序遍历输出的是一个升序排序 因为左孩子的值小嘛 父节点老二 右孩子的值最大)
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类 linkedList queue = new linkedList (); 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);//有孩子入栈 } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)