Skip to content
本页目录

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;
    }
}

Released under the MIT License.