给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
题解:广搜即可;
class Solution {
public:
vector<int>v;
queue<TreeNode*>qq;
vector<int> rightSideView(TreeNode* root) {
if(root) qq.push(root);
while(!qq.empty()){
TreeNode* r=qq.back();
v.push_back(r->val);
int len=qq.size();
while(len--){
TreeNode* p=qq.front();
if(p->left) qq.push(p->left);
if(p->right) qq.push(p->right);
qq.pop();
}
}
return v;
}
};
给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
题解:以下是演变过程:
class Solution {
public:
void flatten(TreeNode* root) {
TreeNode* rt = root;
while(rt!=NULL){
TreeNode* p=rt->left;
TreeNode* l=p;
if(p==NULL){
rt=rt->right;
continue;
}
while(p->right!=NULL) p=p->right;
p->right=rt->right;
rt->right=l;
rt->left=NULL; // 记得将左子树置为空
rt=rt->right;
}
}
};