用时: 60 min
思路还是很简单的,先用 DFS 给每一个节点加上 parent ,顺便找到需要的target 。
然后从 target 出发,用DFS找到离target距离为K 的点 。
依次找到target的所有父级,用 DFS 找到距离为 K 的点。
花费时间比较多的原因是,找到父级后,又用 DFS 原路找了回来,造成了内存溢出。
避免的方法是找到父级后,如果自身是左孩子,就去右孩子找(因为左孩子已经找过了),反之则反
1 | var distanceK = function(root, target, K) { |
需要注意的几个点
- 注意判空
- 父节点本身可能就是需要找到的节点,如果父节点本身就是距离k,就没必要继续找下去了。