[剑指offer]面试题第[55-2]题[Leetcode][第110题][JAVA][平衡二叉树][DFS][剪枝]
生活随笔
收集整理的這篇文章主要介紹了
[剑指offer]面试题第[55-2]题[Leetcode][第110题][JAVA][平衡二叉树][DFS][剪枝]
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【問(wèn)題描述】[中等]
輸入一棵二叉樹的根節(jié)點(diǎn),判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節(jié)點(diǎn)的左右子樹的深度相差不超過(guò)1,那么它就是一棵平衡二叉樹。示例 1:給定二叉樹 [3,9,20,null,null,15,7]3/ \9 20/ \15 7 返回 true 。示例 2:給定二叉樹 [1,2,2,3,3,null,null,4,4]1/ \2 2/ \3 3/ \4 4 返回 false 。限制:1 <= 樹的結(jié)點(diǎn)個(gè)數(shù) <= 10000【解答思路】
1. 后序遍歷 + 剪枝 (從底至頂)
時(shí)間復(fù)雜度:O(N) 空間復(fù)雜度:O(N)
2. 先序遍歷 + 判斷深度 (從頂至底)
時(shí)間復(fù)雜度:O(NlogN) 空間復(fù)雜度:O(N)
【總結(jié)】
1.樹的遍歷方式總體分為兩類:深度優(yōu)先搜索(DFS)、廣度優(yōu)先搜索(BFS);
常見的 DFS : 先序遍歷、中序遍歷、后序遍歷;
常見的 BFS : 層序遍歷(即按層遍歷)。
2.二叉樹遍歷
- 前序遍歷 先輸出當(dāng)前結(jié)點(diǎn)的數(shù)據(jù),再依次遍歷輸出左結(jié)點(diǎn)和右結(jié)點(diǎn)
- 中序遍歷 先遍歷輸出左結(jié)點(diǎn),再輸出當(dāng)前結(jié)點(diǎn)的數(shù)據(jù),再遍歷輸出右結(jié)點(diǎn)
- 后續(xù)遍歷 先遍歷輸出左結(jié)點(diǎn),再遍歷輸出右結(jié)點(diǎn),最后輸出當(dāng)前結(jié)點(diǎn)的數(shù)據(jù)
3. 審題 任意節(jié)點(diǎn) 遍歷所有情況 切忌想當(dāng)然
轉(zhuǎn)載鏈接:https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/solution/mian-shi-ti-55-ii-ping-heng-er-cha-shu-cong-di-zhi/
總結(jié)
以上是生活随笔為你收集整理的[剑指offer]面试题第[55-2]题[Leetcode][第110题][JAVA][平衡二叉树][DFS][剪枝]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 国内外自动驾驶仿真软件总结
- 下一篇: 为什么我在CSDN坚持写了3年多的博客?