第3关: 二叉树的实现之后序遍历
200
- 任务要求
- 参考答案
- 评论40
任务描述
本关任务:实现以二叉链表存储的二叉树的后序遍历算法。
相关知识
二叉树的相关基础知识请参考上一关。
二叉树的后序遍历
后序遍历是指在遍历二叉树时,先递归地打印结点的左子树、右子树,最后打印结点。对于下图:
其后序遍历结果为:0 5 4 6 7 3
。
遍历示意图如下:
后序遍历的递归算法可表示如下: 若二叉树非空,则: (1) 遍历左子树; (2) 遍历右子树; (3) 访问根结点。
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下:
- 补全
postOrder(TreeNode root)
方法,实现后序遍历功能,并输出结点值。
具体请参见后续测试样例。
测试说明
测试过程:
- 平台将创建用户补全后的
BinaryTree
类的对象, - 调用对象的
createTree(int arr[])
方法,用arr
中的数据构建二叉树,并返回根结点, - 调用对象的
postOrder(TreeNode root)
方法,进行后序遍历并输出结点值, - 接着根据程序的输出判断程序是否正确。
本关涉及的代码文件BinaryTree.java
的代码(答案 大家可以有序拿走,创作不易,打赏助力支持是我前进的动力 予星河)
package step3;
/**
* Created by zengpeng on 2018/2/12.
YJH YJH YJH
*/
public class BinaryTree {
private TreeNode root;//根节点
public BinaryTree() {
root = null;
}
public void postOrder(TreeNode root) {
/********** Begin *********/
if(root==null){
return;
}
postOrder(root.leftChild);//予星河 YJH
postOrder(root.rightChild);
System.out.println(root.item);
/********** End *********/
}
/**
* 以数组arr的数据,依次从上至下,从左至右构建一颗二叉树
*/
public TreeNode createTree(int arr[]) {
TreeNode tmp[] = new TreeNode[arr.length + 1];
for (int k = 1; k <= arr.length; k++) {
TreeNode node = new TreeNode(arr[k - 1]);
tmp[k] = node;
if (k == 1) {
root = node;
} else {
int j = k / 2;
if (k % 2 == 0) {
tmp[j].leftChild = node;
} else {
tmp[j].rightChild = node;
}
}
}
return root;
}
public static class TreeNode {
private TreeNode leftChild;
private TreeNode rightChild;
private int item;
public TreeNode(int item) {
this(null, null, item);
}
public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
this.leftChild = leftChild;
this.rightChild = rightChild;
this.item = item;
}
}
}
致谢:JAVA数据结构启蒙导师陶老师
浏览支持的友友 (创作不易 )
越王楼、涪江畔、园艺山、天府院 鸿云科技