LeetCode 二叉树中所有距离为K的节点

给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。

返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/all-nodes-distance-k-in-binary-tree
在这里插入图片描述
提示:

给定的树是非空的。
树上的每个结点都具有唯一的值 0 <= node.val <= 500 。
目标结点 target 是树上的结点
0 <= K <= 1000.

解题思路:
1、判断当前根节点是否是target这个节点,如果是,直接调用方法,查找左右子树中距离这个节点为k的子节点。如果不是,那么就执行步骤2.
2、在当前节点中查找target的父节点parent,如果parent为null,说明这棵树中没有target这个节点,否则如果可以找到target的父节点的时候,那么判断target是parent的哪一个子节点,然后调用方法查找距离为k的子节点,这时候找到的是target的子节点,但是实际结果还可能包括target的父节点甚至是父节点的其他子节点。所以这时候进入递归,重新调用方法distanceK(root,parent,k - 1),查找距离parent为k - 1的节点。但是递归查找距离parent为k - 1的时候需要注意一点,访问的子节点不可以是已经访问过的,需要标记哪些顶点已经访问过了,所以在将target的子节点添加到列表之后,都需要将target变成null,表示已经访问过了。

如果仍旧不清楚,请看下面的演示过程:
在这里插入图片描述

对应的代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
   
   
    List<Integer> list = new ArrayList<Integer>();
    public List<Integer> distanceK(TreeNode root, TreeNode target, int k) {
   
   
        if(root == target){
   
   
        //如果根节点就是target这个节点,那么从它的左右子树中查找距离为K的节点
        //这时候不在需要执行递归了,这也是为什么没有写递归结束的条件,程序依旧不会发生报错的原因
            findDistancdK(root,k);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值