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