题目描述:
示例 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);
}
}
}