前言
前序遍历:
先访问左子树,再访问右子树,最后访问根结点
代码示例
代码中用到的二叉树BinaryTree类是 树结构-二叉查找树_lujiangui的专栏-CSDN博客 这里自定义的二叉树类
用的Queue类是 线性表-队列_lujiangui的专栏-CSDN博客 里的自定义队列类
public Queue<K> postorderTraversal(){
Queue<K> keys = new Queue<>();
postorderTraversal(root,keys);
return keys;
}
public void postorderTraversal(Node<K,V> x,Queue<K> keys){
if (x==null){
return;
}
//先访问左子树
if (x.left!=null){
postorderTraversal(x.left,keys);
}
//最后访问右子树
if (x.right!=null){
postorderTraversal(x.right,keys);
}
//再访问根结点
keys.add(x.key);
}
测试:
public static void main(String[] args) {
BinaryTree<Integer, String> bt = new BinaryTree<>();
bt.put(8,"aaa");
bt.put(12,"bbb");
bt.put(6,"ccc");
bt.put(3,"ddd");
bt.put(11,"ddd");
bt.put(7,"ddd");
Queue<Integer> keys = bt.postorderTraversal();
for (Integer key : keys) {
System.out.print(key+",");
}
}