查找二叉树中距离为K的节点

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

题目:给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。
返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。

示例:
输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2
输出:[7,4,1]

解释:
所求结点为与目标结点(值为 5)距离为 2 的结点,
值分别为 7,4,以及 1


image
var distanceK = function(root, target, k) {
    if (!root) return [];
    let res = [], paths = [], targetNode = null;
    function dfs(_root, _target) {
        if (!_root || targetNode) return;
        if (_root.val === _target.val) {
            targetNode = _root
        }
        if (_root.left) {
            _root.left.parent = _root;
            dfs(_root.left, target)
        }
        if (_root.right) {
            _root.right.parent = _root;
            dfs(_root.right, target)
        }
    }

    function getdownDis(node, k) {
        if(node === null || paths.indexOf(node) !== -1) return;
        paths.push(node);
        if(k > 0){
            getdownDis(node.left, k-1);
            getdownDis(node.right, k-1);  
        }else if(k === 0){
            res.push(node.val);
        }
    }
    // 找到target节点
    dfs(root, target)
    // 从当前节点向下寻找
    getdownDis(targetNode, k);
    // 从当前节点向上寻找
    while(targetNode.parent && k > 0){
        targetNode = targetNode.parent;
        getdownDis(targetNode, --k);
    }
    return res;
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容