Appearance
1602-找到二叉树中最近的右侧节点
https://leetcode.cn/problems/find-nearest-right-node-in-binary-tree
给定一棵二叉树的根节点 root 和树中的一个节点 u ,返回与 u 所在层中距离最近的右侧节点,当 u 是所在层中最右侧的节点,返回 null 。
示例 1: 
输入:root = [1,2,3,null,4,5,6], u = 4
输出:5
解释:节点 4 所在层中,最近的右侧节点是节点 5。
示例 2: 
输入:root = [3,null,4,2], u = 2
输出:null
解释:2 的右侧没有节点。
示例 3:
输入:root = [1], u = 1
输出:null
示例 4:
输入:root = [3,4,2,null,null,null,1], u = 4
输出:2
提示:
树中节点个数的范围是 [1, 10^5] 。
1 <= Node.val <= 10^5
树中所有节点的值是唯一的。
u 是以 root 为根的二叉树的一个节点。
思路
BFS 广度优先搜索,把节点用Queue依次展开,并且比较节点u,则下一个节点就是需要的节点。 逐层遍历,考虑的下一层会在展开时加入到queue,所以当前节点u获取时,如果== queue Count 则返回 Null
参考代码
csharp
public class Solution {
public TreeNode FindNearestRightNode(TreeNode root, TreeNode u) {
if(root == null || u == null){
return null;
}
Queue<TreeNode> queue = new Queue<TreeNode>();
queue.Enqueue(root);
while(queue.Count > 0){
int count = queue.Count;
for(int i=0; i<count; i++){
TreeNode cur = queue.Dequeue();
if(cur == u){
if(i < count -1){
return queue.Dequeue();
}
else{
return null;
}
}
//展开节点
if(cur.left != null){
queue.Enqueue(cur.left);
}
if(cur.right != null){
queue.Enqueue(cur.right);
}
}
}
return null;
}
}
AlgoPress