0
点赞
收藏
分享

微信扫一扫

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

兽怪海北 2021-09-21 阅读 69
今日算法
题目描述:
示例 1:
思路:
  • 输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2
  • 输出:[7,4,1]
public void dfs(TreeNode node, Integer index) {
        if (node == null) return;
        if (index == 0) {
            list.add(node.val);
            return;
        }
      
        dfs(node.left, index - 1);
        dfs(node.right, index - 1);
    }
// 维护当前节点与其父节点的关系
public void parent(TreeNode root) {
        if (root.left != null) {
            map.put(root.left.val, root);
            parent(root.left);
        } 
        if (root.right != null) {
            map.put(root.right.val, root);
            parent(root.right);
        }
    }

public void dfs(TreeNode node,  Integer index) {
        if (node == null) return;
        if (index == 0) {
            list.add(node.val);
            return;
        }
  
        dfs(node.left, index - 1);
        dfs(node.right, index - 1);
        dfs(map.get(node.val), index - 1);
    }
public void dfs(TreeNode node, TreeNode src, Integer index) {
        if (node == null) return;
        if (index == 0) {
            list.add(node.val);
            return;
        }
        if (node.left != src) 
        dfs(node.left, node, index - 1);
        if (node.right != src)
        dfs(node.right, node, index - 1);
        if (map.get(node.val) != src)
        dfs(map.get(node.val), node, index - 1);
    }
代码实现:
class Solution {
    public List<Integer> list = new ArrayList();
    public Map<Integer, TreeNode> map = new HashMap();
    public List<Integer> distanceK(TreeNode root, TreeNode target, int k) {
        parent(root);
        dfs(target, null, k);
        return list;
    }
    public void dfs(TreeNode node, TreeNode src, Integer index) {
        if (node == null) return;
        if (index == 0) {
            list.add(node.val);
            return;
        }
        if (node.left != src) 
        dfs(node.left, node, index - 1);
        if (node.right != src)
        dfs(node.right, node, index - 1);
        if (map.get(node.val) != src)
        dfs(map.get(node.val), node, index - 1);
    }

    public void parent(TreeNode root) {
        if (root.left != null) {
            map.put(root.left.val, root);
            parent(root.left);
        } 
        if (root.right != null) {
            map.put(root.right.val, root);
            parent(root.right);
        }
    }
}
举报

相关推荐

0 条评论