zoukankan      html  css  js  c++  java
  • [面试真题] LeetCode:Construct Binary Tree from Preorder and Inorder Traversal

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

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

    解法:递归求解。

      基本情况:先序与中序数组长度小于1时,返回NULL。

      递归步骤:首先确定preorder的第一个元素一定是该树的root,再在inorder中找到该元素,标记为index,index左部为左子树的中序,右部为右子树的中序;随后通过左右子树中序的长度(可能为0),在preorder中确定左右子树的先序。

     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11     TreeNode *buildTree(vector<int> &preorder,int ph, int pe, vector<int> &inorder, int ih, int ie){
    12         TreeNode *root;
    13         if(pe - ph < 0){
    14             return NULL;
    15         }
    16         root = new TreeNode(preorder[ph]);
    17         int index = ih-1;
    18         while(++index <= ie && inorder[index] != preorder[ph]){
    19         }
    20         int leftPreLen = index - ih;
    21         root->left = buildTree(preorder, ph+1, ph+leftPreLen, inorder, ih, index-1);
    22         root->right = buildTree(preorder, ph+leftPreLen+1, pe, inorder, index+1, ie);
    23         return root;
    24     }
    25     
    26 public:
    27     TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
    28         // Start typing your C/C++ solution below
    29         // DO NOT write int main() function
    30         return buildTree(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1);
    31         
    32     }
    33 };

    Run Status: Accepted!
    Program Runtime: 164 milli secs

  • 相关阅读:
    获取父窗口的xxx节点的方法
    enumeration
    关于Java正则表达式的一些理解
    简单JNI的使用在Java中调用C库函数
    cursor管理
    [转]Vim配置与高级技巧
    [转]Vim+Taglist+Ctags
    在Windows下面使用cygwin将含有JNI的C文件编译成DLL文件
    vim转换大小写
    JMeter学习资料集锦
  • 原文地址:https://www.cnblogs.com/infinityu/p/3073908.html
Copyright © 2011-2022 走看看