Construct Binary Tree from Preorder and Inorder Traversal<leetcode>

构建二叉树
本文介绍了一种通过前序遍历和中序遍历构建二叉树的方法。利用递归算法,根据前序和中序遍历序列重建二叉树结构,并提供了一段C++实现代码。

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 /**
 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 public:
12     TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
13         if(preorder.empty()||inorder.empty())  return NULL;
14         return build(preorder,0,preorder.size()-1,inorder,0,inorder.size()-1);
15     }
16     TreeNode  *build(vector<int> &preorder,int l,int r,vector<int> &inorder,int ll,int rr)
17     {
18         if(l>r||ll>rr)  return NULL;
19         TreeNode* root=new TreeNode(0);
20         root->val=preorder[l];
21         if(l==r)  return root;
22         int mid=0;
23         for(int i=ll;i<=rr;i++)
24         {
25             if(inorder[i]==preorder[l])
26             {
27                 mid=i;
28                 break;
29             }
30         }
31         int midd=mid-ll+l;
32         root->left=build(preorder,l+1,midd,inorder,ll,mid-1);
33         root->right=build(preorder,midd+1,r,inorder,mid+1,rr);
34         return root;
35     }
36 };

 

转载于:https://www.cnblogs.com/sqxw/p/4001056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值