1008. 先序遍历构造二叉树

一、终于用上了单调栈,感觉还行,思路相当的清晰,写起来很快

 1 TreeNode* bstFromPreorder(vector<int>& preorder) {
 2     int size = preorder.size();
 3     if (size == 0)
 4         return nullptr;
 5     TreeNode* root = new TreeNode(preorder[0]);
 6     stack<TreeNode*> use;
 7     use.push(root);
 8     TreeNode* last = root;
 9     for (int i = 1; i < size; ++i)
10     {
11         TreeNode* t = new TreeNode(preorder[i]);
12         if (t->val > use.top()->val)
13         {
14             while (!use.empty() && t->val > use.top()->val)
15             {
16                 last = use.top();
17                 use.pop();
18             }
19             last->right = t;
20         }
21         else
22         {
23             use.top()->left = t;
24         }
25         use.push(t);
26     }
27     return root;
28 }

二、递归

 1 TreeNode* recur(vector<int>& preorder, int up, int down)
 2 {
 3     if (up > down)
 4         return nullptr;
 5     else if (up == down)
 6         return new TreeNode(preorder[up]);
 7     TreeNode* root = new TreeNode(preorder[up]);
 8     int index = up+1;
 9     for (; index <= down; ++index)
10     {
11         if (preorder[index] > preorder[up])
12         {
13             break;
14         }
15     }
16     root->left = recur(preorder, up + 1, index - 1);
17     root->right = recur(preorder, index, down);
18     return root;
19 }
20 TreeNode* bstFromPreorder(vector<int>& preorder) {
21     int size = preorder.size();
22     if (size == 0)
23         return nullptr;
24     int up = 0;
25     int down = size - 1;
26     TreeNode* root = recur(preorder, up, down);
27     return root;
28 }

 

转载于:https://www.cnblogs.com/zouma/p/11526241.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值