LeetCode 102二叉树的层序遍历103二叉树锯齿形遍历104二叉树的最大深度
微信搜一搜:bigsai
大家都在關注的刷題、學習數據結構和算法寶藏項目
關注回復進群即可加入力扣打卡群,歡迎劃水。近期打卡:
LeetCode 97交錯字符串(動態規劃)
LeetCode 98驗證二叉搜素樹(中序遍歷)&99恢復二叉搜索樹
LeetCode 100相同的樹&101對稱二叉樹
二叉樹的層序遍歷
給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。
示例:
二叉樹:[3,9,20,null,null,15,7],
分析
二叉樹層序遍歷過程詳細看這篇,直接套魔板即可。
二叉樹鋸齒形遍歷
給定一個二叉樹,返回其節點值的鋸齒形層序遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
例如:
給定二叉樹 [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回鋸齒形層序遍歷如下:[[3],[20,9],[15,7] ]分析:
就是一個特殊的層序遍歷。更換層的時候需要更換節點順序,這需要我們用兩個內存空間配合達到分清奇偶的目的。這里有的是從左到右,有的是從右到左,理論上可以借助棧將集合的元素反轉但是沒必要。我用兩個List集合直接剛就行了。
首先進行分析:
- 第一行從左到右,第二行從右到左,第三行從左到右。兩個list裝的是節點,而還需要每次遍歷根據奇數和偶數的特性將節點裝起來。
- (普遍方法)你可以全部按照正常的順序分層裝起來,只不過如果偶數層遍歷的時候從右往左加進結果集合。比較好想,容易操作,但是偶數層在添加節點時候不能同時遍歷。
- 但是筆者瞎搞發現一個規律。全部從右往左遍歷。只不過在奇數行先添加(左后右)。而偶數行進行右左添加,相當于這個順序操作一次被顛倒一次,每次添加節點都可以直接訪問而不需要單獨的訪問。(這個方法可能復雜了上面一條其實就可以了)
實現代碼為:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/ class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>>list=new ArrayList<List<Integer>>();if(root==null)return list;ArrayList<TreeNode>nodelist1=new ArrayList<TreeNode>();//用來模擬堆棧用ArrayList<TreeNode>nodelist2=new ArrayList<TreeNode>();nodelist1.add(root);int num=1;//做奇數偶數while (!nodelist1.isEmpty()||!nodelist2.isEmpty()) {ArrayList<Integer>team=new ArrayList<Integer>();if(num%2==1) {for(int i=nodelist1.size()-1;i>=0;i--){TreeNode teamNode=nodelist1.get(i);team.add(teamNode.val);if(teamNode.left!=null)nodelist2.add(teamNode.left);if(teamNode.right!=null)nodelist2.add(teamNode.right);}nodelist1.clear();}else {for(int i=nodelist2.size()-1;i>=0;i--){TreeNode teamNode=nodelist2.get(i);team.add(teamNode.val);if(teamNode.right!=null)nodelist1.add(teamNode.right);if(teamNode.left!=null)nodelist1.add(teamNode.left);}nodelist2.clear();}list.add(team);num++;}return list;} }二叉樹的最大深度
給定一個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回它的最大深度 3 。分析
可以使用二叉樹的遍歷同時記錄深度,保存最大的深度即可。
具體代碼為:
原創不易,bigsai請你幫兩件事幫忙一下:
star支持一下, 您的肯定是我在平臺創作的源源動力。
微信搜索「bigsai」,關注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術。加我還可拉你進力扣打卡群一起打卡LeetCode。
記得關注、咱們下次再見!
總結
以上是生活随笔為你收集整理的LeetCode 102二叉树的层序遍历103二叉树锯齿形遍历104二叉树的最大深度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 100相同的树101对
- 下一篇: 经典面试题:给两个序列如何构造一棵二叉树