zoukankan      html  css  js  c++  java
  • 根据中序和前序遍历的结果还原二叉树

    Given preorder and inorder traversal of a tree, construct the binary tree.

    Note:
    You may assume that duplicates do not exist in the tree.

    根据二叉树的前序遍历和中序遍历形成的数组,还原出二叉树 ,二叉树中没有重复的元素

    思路:前序遍历数组有特点:数组的每个数都是接下来几个数的根节点,和后边几个数构成子树,只要知道每棵子树节点的个数,就可以知道每棵树的根节点
    中序遍历数组有特点:根节点总是在中间,两边分别是左子树和右子树,只要知道根节点,就能回到左子树和右子树的区间个节点个数
    根据这两个特点,可以递归构建所有子树,最后返回的就是整个树
    public TreeNode buildTree(int[] preorder, int[] inorder) {
            return build(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
        }
        public TreeNode build(int[] preorder,int preSta,int preEnd,int[] inorder,int inSta,int inEnd)
        {
            //到叶节点返回
            if (preSta > preEnd || inSta > inEnd)
            {
                return null;
            }
            else
            {
                //获取此次的根节点下标
                int index = 0;
                for (int i = inSta; i <= inEnd; i++) {
                    if (inorder[i] == preorder[preSta])
                    {
                        index = i;
                        break;
                    }
                }
                //左子树和右子树的长度
                int len1 = index - inSta-1;
                int len2 = inEnd - index-1;
                //当前树
                TreeNode cur = new TreeNode(preorder[preSta]);
                //当前树的左右子树又递归求得
                cur.left = build(preorder,preSta+1,preSta+1+len1,inorder,inSta,index-1);
                cur.right = build(preorder,preEnd-len2,preEnd,inorder,index+1,inEnd);
                return cur;
            }
    
        }
     
  • 相关阅读:
    1.2变量声明的意义
    1.1两个char类型数据相加后,转化为int类型
    欢迎使用CSDN-markdown编辑器
    python-布尔表达式
    程序基本机构
    Python math库和random库
    Python中类型的概念(一)
    Python turtle库的应用——蛇
    Python语法元素分析
    程序设计基本方法
  • 原文地址:https://www.cnblogs.com/stAr-1/p/7341278.html
Copyright © 2011-2022 走看看