zoukankan      html  css  js  c++  java
  • [LeetCode-20]Construct Binary Tree from Inorder and Postorder Traversal

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

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

    the idea is similar with the former one [Leetcode-21]

    java

    public TreeNode buildTree(int[] inorder, int[] postorder) {
    		return buildIP(inorder, postorder, 0, inorder.length-1, 0, postorder.length-1);
        }
    	public TreeNode buildIP(int[] inorder, int[] postorder, int i_s, int i_e, int p_s, int p_e){
    		if(p_s>p_e)
    			return null;
    		int pivot = postorder[p_e];
    		int i = i_s;
    		for(;i<=i_e;i++){
    			if(inorder[i]==pivot)
    				break;
    		}
    		TreeNode node = new TreeNode(pivot);
    		int lenRight = i_e-i;
    		node.left = buildIP(inorder, postorder, i_s, i-1, p_s, p_e-lenRight-1);
    		node.right = buildIP(inorder, postorder, i+1, i_e, p_e-lenRight, p_e-1);
    		return node;
    	}

    c++

    TreeNode *BuildTreeIP(
            vector<int> &inorder,
            vector<int> &postorder,
            int i_s, int i_e,
            int p_s, int p_e){
            if(i_s > i_e) return NULL;
            int pivot = postorder[p_e];
            int i = i_s;
            for(;i<i_e;i++){
                if(inorder[i] == pivot)
                    break;
            }
            int length1 = i-i_s;
            int length2 = i_e-i;
            TreeNode *node = new TreeNode(pivot);
            node->left = BuildTreeIP(inorder, postorder, i_s, i-1, p_s, p_s+length1-1);
            node->right = BuildTreeIP(inorder, postorder, i+1, i_e, p_e-length2, p_e-1);
            return node;
            
        }
        TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
            return BuildTreeIP(inorder, postorder, 0, inorder.size()-1, 0, postorder.size()-1);
        }


  • 相关阅读:
    Android Studio 自定义签名,代码段快捷键
    Hardware Acceleration
    AsyncTask
    Process and Threads
    android通讯录开发及优化
    短信验证码SDK
    怎样让Mac成为一个有效的生产力工具
    GitHub开源项目
    jquery $(document).ready() 与window.onload的区别
    【Ionic+AngularJS 开发】之『个人日常管理』App(二)
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6701163.html
Copyright © 2011-2022 走看看