第3关: 二叉树的实现之后序遍历;任务描述本关任务:实现以二叉链表存储的二叉树的后序遍历算法。相关知识二叉树的相关基础知识请参考上一关。

第3关: 二叉树的实现之后序遍历

200

  • 任务要求
  • 参考答案
  • 评论40

任务描述

本关任务:实现以二叉链表存储的二叉树的后序遍历算法。

相关知识

二叉树的相关基础知识请参考上一关。

二叉树的后序遍历

后序遍历是指在遍历二叉树时,先递归地打印结点的左子树、右子树,最后打印结点。对于下图:

其后序遍历结果为:0 5 4 6 7 3

遍历示意图如下:

后序遍历的递归算法可表示如下: 若二叉树非空,则: (1) 遍历左子树; (2) 遍历右子树; (3) 访问根结点。

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全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数据结构启蒙导师陶老师

          浏览支持的友友 (创作不易 )

      越王楼、涪江畔、园艺山、天府院  鸿云科技

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值