树学习----从前序与中序遍历序列构造二叉树

这道题还是使用递归的方法框架,主要就是观察前序遍历与中序遍历的特征。通过画图可以比较容易想到解法。

中间调试的时候报错了很多次。。。debug的时候发现,for循环里面,l2其实是可以等于r2的,这样的时候只有一个结点,而不是null。

class Solution {

public:

    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {

        

        return Tr(preorder,0,preorder.size() - 1,

                  inorder,0,inorder.size() - 1);

    }

 

    TreeNode* Tr(vector<int>& preorder,int l1,int r1,

                 vector<int>& inorder,int l2,int r2){

                     if(l1 > r1)

                        return NULL;

                     int index = 0;

                     TreeNode* root = new TreeNode(preorder[l1]);

                     for(int i = l2;i <= r2;i++){

                         if(inorder[i] == preorder[l1]){

                             index = i;

                             break;

                         }

                     }

                     root->left = Tr(preorder,l1 + 1,l1 + index - l2,

                                     inorder,l2,index - 1);

                     root->right = Tr(preorder,l1 + index - l2 + 1,r1,

                                      inorder,index + 1,r2);

                    return root;

                 }

};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值