技术交流可以加:
本人微信:xcg852390212
本人qq:852390212
学习交流qq群1(已满): 962535112
学习交流qq群2: 780902027
二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
解答
树的层序遍历的进阶,遍历树的时候设置双指针,pre
指向当前层的最后一个节点,next
指向遍历到的最新的结点,取出每层最后一个结点(pre
)的值到结果数组res
。
C++代码
/**
* 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:
vector<int> rightSideView(TreeNode* root) {
vector<int> res;
if(!root) return res;
queue<TreeNode*> que;
que.push(root);
TreeNode* pre = root;
TreeNode* next = nullptr;
while(!que.empty())
{
TreeNode* cur = que.front();
que.pop();
if(cur->left)
{
que.push(cur->left);
next = cur->left;
}
if(cur->right)
{
que.push(cur->right);
next = cur->right;
}
if(pre == cur)
{
res.push_back(cur->val);
pre = next;
}
}
return res;
}
};
Python代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
if root is None:
return []
res = []
que = []
pre = root
nex = None
que.append(root)
while len(que) > 0:
cur = que.pop(0)
if cur.left:
que.append(cur.left)
nex = cur.left
if cur.right:
que.append(cur.right)
nex = cur.right
if cur == pre:
pre = nex
res.append(cur.val)
return res