[leetcode] Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:jsp获取mac 编辑:程序博客网 时间:2024/06/09 16:43

Construct Binary Tree from Preorder and Inorder Traversal

class Solution {public:    TreeNode *buildTreebyIndex(vector<int> &preorder,int preBegin,int preEnd,vector<int> &inorder,int inBegin,int inEnd){                if (preBegin>preEnd||inBegin>inEnd) {            return nullptr;        }                int val=preorder[preBegin];        int index;        for (int i=inBegin; i<=inEnd; i++) {            if (val==inorder[i]) {                index=i;                break;            }        }                int len=index-inBegin;        TreeNode *pleft=buildTreebyIndex(preorder, preBegin+1, preBegin+len, inorder, inBegin, index-1);        TreeNode *pright=buildTreebyIndex(preorder, preBegin+len+1, preEnd, inorder, index+1, inEnd);                TreeNode *node=new TreeNode(val);        node->left=pleft;        node->right=pright;                return node;            }        TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {        if (preorder.size()==0) {            return nullptr;        }        return buildTreebyIndex(preorder,0,preorder.size()-1,inorder,0,inorder.size());    }};

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* buildTreeHelper(vector<int>& preorder,vector<int>& inorder,int fromp,int fromi,int length){        if(length==0){            return 0;        }        TreeNode *root=new TreeNode(preorder[fromp]);        int i=fromi;        for(;inorder[i]!=preorder[fromp];++i);//找到对应的root在中序遍历中的位置        root->left=buildTreeHelper(preorder,inorder,fromp+1,fromi,i-fromi);        root->right=buildTreeHelper(preorder,inorder,fromp+1+i-fromi,i+1,length-i-1+fromi);//长度更新为length-i-1+fromi        return root;    }    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {        return buildTreeHelper(preorder,inorder,0,0,preorder.size());//from 0 ...    }};


/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode helper(int[] preorder,int[] inorder,int fromp,int fromi,int len){        if(len==0){            return null;        }        TreeNode node=new TreeNode(preorder[fromp]);//(子)树的根        int i=fromi;        for(;inorder[i]!=preorder[fromp];++i);//找到对应的根所在的位置        node.left=helper(preorder,inorder,fromp+1,fromi,i-fromi);        node.right=helper(preorder,inorder,fromp+1+i-fromi,i+1,len-1-i+fromi);        return node;    }    public TreeNode buildTree(int[] preorder, int[] inorder) {        return helper(preorder,inorder,0,0,preorder.length);    }}
测试程序
public class Test1031 {public static void main(String[] args) {Solution st=new Solution();int[] preorder={1,2};int[] inorder={1,2};TreeNode node=st.buildTree(preorder, inorder);printNode(node);}public static void printNode(TreeNode node) {if (node == null) {return;}else{//必须放在else内部,否则会莫名报错System.out.println(node.val);printNode(node.left);printNode(node.right);}}}




0 0
原创粉丝点击