[3,2,1,6,0,5]
stk is empty
push 3
2<3 3->(right)2 push 2
stk 3 2
1<2 2->(right)1 push 1
stk 3 2 1
6现在是最大的,拿6和stk里面的各个元素进行比较,将小于6的作为左孩子。stk里面的元素已经存在了树结构关系。
6>1 6->(left)1 pop 1
stk 3 2
6>2 6->(left)2 pop2
stk 3
6>3 6->(left)3 pop3
stk is empty
6->(left)3->(right)2->(right)1
push 6
-------------------------
0<6 6->(right)0 push 0
stk 6 0
重复上面的步骤,就可以得到一个最大二叉树
/**
* 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* constructMaximumBinaryTree(vector<int>& nums) {
if(nums.size() == 0)
return NULL;
vector<TreeNode*> stk;
for(int i = 0;i<nums.size();i++){
TreeNode* cur = new TreeNode(nums[i]);
// stk 中存放 3 2 1,且3->2->1,现在有6,循环6->1,6->2,6->3,until stk is empty.6->3->2->1
while(stk.size()&&(stk.back()->val < cur->val)){
cur->left = stk.back();
stk.pop_back();
}
if(stk.size()){// stk.size()&&(stk.back()->val > cur->val)
stk.back()->right = cur;
}
stk.push_back(cur);
// stk only 6
}
return stk.front();
}
};