日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编号是i的结点所在的层次号是_九章算法 | 微软面试题:二叉树的锯齿形层次遍历...

發布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编号是i的结点所在的层次号是_九章算法 | 微软面试题:二叉树的锯齿形层次遍历... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給出一棵二叉樹,返回其節點值的鋸齒形層次遍歷(先從左往右,下一層再從右往左,層與層之間交替進行)

在線評測地址:LintCode 領扣

樣例 1:

輸入:{1,2,3} 輸出:[[1],[3,2]] 解釋:1/ 2 3 它將被序列化為 {1,2,3}

樣例 2:

輸入:{3,9,20,#,#,15,7} 輸出:[[3],[20,9],[15,7]] 解釋:3/ 9 20/ 15 7 它將被序列化為 {3,9,20,#,#,15,7}

【題解】

算法:樹的層次遍歷

層次遍歷,可以運用廣度遍歷的思想實現從上往下的逐層遍歷。從頭結點開始逐層遍歷,開辟一個新隊列,讓頭結點入隊并計算此時的長度,每次都將當前層的子節點全部壓入隊列,然后對下一層的節點進行遍歷,再將下一層的子節點壓入隊列,不斷循環,一直遍歷到底層,判斷的終止條件就是隊列不為空。

  • 循環里面,隊列頭出隊,判斷其是否有左右子結點,如果有,則將此點的子節點入隊,但此時還不需要更新隊列的長度,當前隊列的長度是每層的長度。當這層的長度減為0時,就說明這層的遍歷結束,開始更新長度為下一層的長度。
  • 出隊的元素的值按照一層層壓入結果數組
  • 因為題目鋸齒形遍歷
  • 我們用一個isforward標記當前方向,每遍歷完一層,如果是反向的,則將這層的節點數組倒序,然后將這層的集合壓入結果

復雜度分析

  • 時間復雜度O(n)
    • n為節點數量
  • 空間復雜度O(n)
    • 存下所有點的信息 n為節點數量
public class Solution {/*** @param root: A Tree* @return: A list of lists of integer include the zigzag level order traversal of its nodes' values.*/public List<List<Integer>> zigzagLevelOrder(TreeNode root){List<List<Integer>> ans = new ArrayList<List<Integer>>();if (root == null) {return ans;}Queue<TreeNode> q = new LinkedList<TreeNode>();//正反向標志boolean isForward = true;q.offer(root);while (!q.isEmpty()) {int size = q.size();List<Integer> subList = new ArrayList<Integer>();for (int i = 0 ; i < size ; i++) {TreeNode treeNode = q.poll();subList.add(treeNode.val);if (treeNode.left != null) { q.offer(treeNode.left);}if (treeNode.right != null) {q.offer(treeNode.right);}}//根據標志來確認當前層遍歷的方向if (!isForward) {Collections.reverse(subList);//翻轉}ans.add(subList);//方向反轉isForward = !isForward;}return ans;} }

更多題解參見:九章算法

總結

以上是生活随笔為你收集整理的编号是i的结点所在的层次号是_九章算法 | 微软面试题:二叉树的锯齿形层次遍历...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。