美文网首页
二叉树遍历及重建

二叉树遍历及重建

作者: 艾剪疏 | 来源:发表于2018-03-14 10:07 被阅读14次

    1 二叉树
    2 二叉树的遍历
    3 二叉树的重建
    4 代码实现

    1 二叉树

    在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

    一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。具有n个节点的完全二叉树的深度为log2(n+1)。深度为k的完全二叉树,至少有2k-1个节点,至多有2k-1个节点。

    2 二叉树的遍历

    下面链接写的很详细

    http://blog.csdn.net/xiaotan2011929/article/details/61427919
    http://blog.csdn.net/Dean_Deng/article/details/47053231
    http://blog.csdn.net/u014744118/article/details/50983826

    3 二叉树的重建

    下面链接写的很详细
    前序 + 中序 重建
    https://www.jianshu.com/p/07ac60fd2e5c
    http://blog.csdn.net/lemon_tree12138/article/details/49798221

    中序 + 后序 重建
    https://blog.csdn.net/wu2304211/article/details/54709205

    4 代码实现

    4.1 算法思路:先找中序遍历和先序遍历相等的值,该值的坐标就是左子树,右边就是右子树,循环递归该算法即可完成建树。

    步骤如下:

    1. 确定树的左右子树:找到中序遍历和先序遍历相等的值,确定左右子树。
    2. 确定左右子树方法:
    • 先序遍历左子树范围 = 先序遍历左子树起始节点坐标 + 1 , 中序遍历左子树范围 + 先序遍历的起始点位置(这个是主要的一个点);
    • 先序遍历右子树范围 = 中序遍历左子树范围 + 先序遍历的起始点位置 + 1 , 先序遍历右子树结束节点
    • 中序遍历左子树范围 = 中序遍历左子树起始点坐标 , 中序遍历左子树的结束节点(就是i:分出左右子树)-1;
    • 中序遍历右子树范围 = 中序遍历左子树的结束节点(就是i:分出左右子树)+ 1,中序遍历右子树结束节点
    1. 对应代码如下:
    private static TreeNode reConstructBinaryTree(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn) {
    
            if (startPre > endPre || startIn > endIn)
                return null;
            TreeNode root = new TreeNode(pre[startPre]);
    
            for (int i = startIn; i <= endIn; i++)
                if (in[i] == pre[startPre]) {
                    root.left = reConstructBinaryTree(pre, startPre + 1, i - startIn + startPre, in, startIn, i - 1);
                    root.right = reConstructBinaryTree(pre, i - startIn + startPre + 1, endPre, in, i + 1, endIn);
                    break;
                }
            return root;
        }
    

    END

    相关文章

      网友评论

          本文标题:二叉树遍历及重建

          本文链接:https://www.haomeiwen.com/subject/tvixqftx.html