LeetCode 863. 二叉树中所有距离为 K 的结点(公共祖先/ DFS+BFS)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 863. 二叉树中所有距离为 K 的结点(公共祖先/ DFS+BFS)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 公共祖先
- 2.2 建圖+BFS
1. 題目
給定一個(gè)二叉樹(shù)(具有根結(jié)點(diǎn) root), 一個(gè)目標(biāo)結(jié)點(diǎn) target ,和一個(gè)整數(shù)值 K 。
返回到目標(biāo)結(jié)點(diǎn) target 距離為 K 的所有結(jié)點(diǎn)的值的列表。 答案可以以任何順序返回。
示例 1: 輸入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2 輸出:[7,4,1] 解釋: 所求結(jié)點(diǎn)為與目標(biāo)結(jié)點(diǎn)(值為 5)距離為 2 的結(jié)點(diǎn), 值分別為 7,4,以及 1 注意,輸入的 "root" 和 "target" 實(shí)際上是樹(shù)上的結(jié)點(diǎn)。 上面的輸入僅僅是對(duì)這些對(duì)象進(jìn)行了序列化描述。提示: 給定的樹(shù)是非空的,且最多有 K 個(gè)結(jié)點(diǎn)。 樹(shù)上的每個(gè)結(jié)點(diǎn)都具有唯一的值 0 <= node.val <= 500 。 目標(biāo)結(jié)點(diǎn) target 是樹(shù)上的結(jié)點(diǎn)。 0 <= K <= 1000.來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/all-nodes-distance-k-in-binary-tree
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
2.1 公共祖先
參考了官網(wǎng)題解區(qū)
- 按照二叉樹(shù)的數(shù)組實(shí)現(xiàn)思想,把各個(gè)節(jié)點(diǎn)編號(hào)
- 知道target的編號(hào) pt 了,遍歷所有節(jié)點(diǎn)編號(hào) pi
- 當(dāng) pt != pi 時(shí),較大的一邊,往上移動(dòng)一層,(p-1)/2,同時(shí)距離 +1,直到相等,找到最近公共祖先
- 時(shí)間復(fù)雜度 O(nlogn)O(nlogn)O(nlogn)
12 ms 15.2 MB
2.2 建圖+BFS
- dfs 建立每個(gè)節(jié)點(diǎn)與父節(jié)點(diǎn)的路徑
- bfs 查找第 k 層節(jié)點(diǎn)
- 時(shí)間復(fù)雜度O(n)O(n)O(n)
8 ms 15.8 MB
總結(jié)
以上是生活随笔為你收集整理的LeetCode 863. 二叉树中所有距离为 K 的结点(公共祖先/ DFS+BFS)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 447. 回旋镖的数量
- 下一篇: LeetCode 846. 一手顺子(m