1、
Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7] [9,20], [3], ]
分析:层次遍历很常见,这个是从下往上的层次遍历,可以考虑先从上往下的层次遍历,然后将前后颠倒。层次遍历中采用队列保存结点。
代码如下所示:
class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root) {
vector<vector<int>> result;
if(root == NULL){
return result;
}
vector<int> levelVec;
queue<TreeNode*> levelStack;
queue<TreeNode*> newStack;
levelStack.push(root);
levelVec.push_back(root->val);
result.push_back(levelVec);
while(!levelStack.empty()){
levelVec.clear();
while(!levelStack.empty()){
TreeNode* node = levelStack.front();
levelStack.pop();
if(node->left){
newStack.push(node->left);
levelVec.push_back(node->left->val);
}
if(node->right){
newStack.push(node->right);
levelVec.push_back(node->right->val);
}
}
if(levelVec.empty()){
break;
}
result.push_back(levelVec);
levelStack.swap(newStack);
}
int start = 0;
int end = result.size()-1;
while(start < end){
result[start].swap(result[end]);
++start;
--end;
}
return result;
}
};
2、Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
分析:这个题跟之前那个Convert Sorted List to Binary Search Tree 相似,就是list时不知道中间结点,而array可以随机访问,比那个还要简单,思路差不多。
class Solution {
public:
TreeNode *sortedArrayToBST(vector<int> &num){
if(num.empty()){
return NULL;
}
return convertCore(num,0,num.size()-1);
}
TreeNode* convertCore(vector<int>& num, int start, int end){
if(start > end || start < 0 || end >= num.size()){
return NULL;
}
TreeNode* root = NULL;
if(start == end){
root = new TreeNode(num[start]);
}else if(start < end ){
int middle = (start+end)/2;
root = new TreeNode(num[middle]);
TreeNode* leftNode = convertCore(num,start,middle-1);
TreeNode* rightNode = convertCore(num,middle+1,end);
root->left = leftNode;
root->right = rightNode;
}
return root;
}
};