第2关:二叉树的实现之中序遍历;任务描述在上一关,我们实现了二叉树的前序遍历,本关我们将实现二叉树的中序遍历。本关任务:实现以二叉链表存储的二叉树的中序遍历算法。

任务描述

在上一关,我们实现了二叉树的前序遍历,本关我们将实现二叉树的中序遍历。

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

相关知识

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

二叉树的中序遍历

中序遍历二叉树时,对结点的访问次序为中序序列,即首先访问左子树,再访问根结点,最后访问右子树。 上图二叉树的中序遍历结果为:0 4 5 3 6 7

中序遍历次序示意图如下:

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

编程要求

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

  • 补全inOrder(TreeNode root)方法,实现二叉树的中序遍历功能,并输出结点的值。

具体请参见后续测试样例。

  • 平台将创建用户补全后的BinaryTree类的对象,
  • 调用对象的createTree(int arr[])方法,用arr中的数据构建二叉树,并返回根结点,
  • 调用对象的inOrder(TreeNode root)方法,进行中序遍历并输出结点值,
  • 接着根据程序的输出判断程序是否正确。

注意一下:测试输入解释部分和实际输入有不同的 ,但是不影响测试结果和实际输出

 本关涉及的代码文件BinaryTree.java的代码(答案 大家可以有序拿走,创作不易,打赏助力支持是我前进的动力 予星河)

package step2;

/**
 * Created by zengpeng on 2018/2/12. 
     YJH YJH YJH 予星河
 */
public class BinaryTree {

    private TreeNode root;//根节点

    public BinaryTree() {
        root = null;
    }

    public void inOrder(TreeNode root) {
        /********** YJH YJH YJH 予星河 Begin *********/
       if(root==null){
             return;
       }
       inOrder(root.leftChild);
       System.out.println(root.item);
       inOrder(root.rightChild);
       
        /**********YJH YJH YJH 予星河 End *********/
    }

    /**
     * 以数组arr的数据,依次从上至下,从左至右构建一颗二叉树
     *
     * @param arr
     * @param n
     * @return
     */
    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数据结构启蒙导师陶虹妃老师

           感谢一路浏览支持的友友(创作不易 支持一下我们的梦想和动力 )

           感谢予星河动力不竭的源泉(YJH  Myself)

猜你喜欢

转载自blog.csdn.net/qq_64001869/article/details/128115955
今日推荐