剑指 Offer 32 . 从上到下打印二叉树
生活随笔
收集整理的這篇文章主要介紹了
剑指 Offer 32 . 从上到下打印二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
main函數測試代碼:
按標準輸入輸出,比如輸入:
3,9,20,null,null,15,7
劍指 Offer 32 - I. 從上到下打印二叉樹
從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序打印。
/*** 劍指 Offer 32 - I. 從上到下打印二叉樹* 從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序打印。*/public static int[] levelOrderI(TreeNode root) {if(root==null){return new int[0];}Queue<TreeNode> queue = new LinkedList<>();queue.add(root);ArrayList<Integer> list = new ArrayList<>();while(!queue.isEmpty()){TreeNode node = queue.remove();list.add(node.val);if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}Integer[] arr = list.toArray(new Integer[list.size()]);int[] res = new int[arr.length];for(int i = 0; i < arr.length; i ++)res[i] = arr[i];return res;}測試結果:
3,9,20,null,null,15,7
[3, 9, 20, 15, 7]
劍指 Offer 32 - II. 從上到下打印二叉樹 II
從上到下按層打印二叉樹,同一層的節點按從左到右的順序打印,每一層打印到一行。
/*** 劍指 Offer 32 - II. 從上到下打印二叉樹 II* 從上到下按層打印二叉樹,同一層的節點按從左到右的順序打印,每一層打印到一行。*/public static List<List<Integer>> levelOrderII(TreeNode root) {List<List<Integer>> List = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if(root!=null){queue.add(root);}while (!queue.isEmpty()){List<Integer> row = new ArrayList<>();for (int i = queue.size(); i > 0; i--) {TreeNode node = queue.poll();row.add(node.val);if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}List.add(row);}return List;}測試結果:
3,9,20,null,null,15,7
[[3], [9, 20], [15, 7]]
如果你使用for (int i=0;i<queue.size(); i++) {}
測試結果:
3,9,20,null,null,15,7
[[3, 9], [20, 15], [7]]
明顯就是錯的,就是因為在程序還沒有出for循環之前,queue.size()變大了。
還有一點要特別注意,不能使用
if(root==null){return null;}這樣當輸入是[],即root=null的時候,輸出是null,實際應該返回的是[]。
劍指 Offer 32 - III. 從上到下打印二叉樹 III
請實現一個函數按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。
思想:層序遍歷 + 雙端隊列(奇偶層邏輯分離)
總結
以上是生活随笔為你收集整理的剑指 Offer 32 . 从上到下打印二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql5.7空间运算,深度解析MyS
- 下一篇: IP地址与子网掩码基础