剑指 Offer 32 . 从上到下打印二叉树
main函數(shù)測試代碼:
按標(biāo)準(zhǔn)輸入輸出,比如輸入:
3,9,20,null,null,15,7
劍指 Offer 32 - I. 從上到下打印二叉樹
從上到下打印出二叉樹的每個(gè)節(jié)點(diǎn),同一層的節(jié)點(diǎn)按照從左到右的順序打印。
/*** 劍指 Offer 32 - I. 從上到下打印二叉樹* 從上到下打印出二叉樹的每個(gè)節(jié)點(diǎn),同一層的節(jié)點(diǎn)按照從左到右的順序打印。*/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;}測試結(jié)果:
3,9,20,null,null,15,7
[3, 9, 20, 15, 7]
劍指 Offer 32 - II. 從上到下打印二叉樹 II
從上到下按層打印二叉樹,同一層的節(jié)點(diǎn)按從左到右的順序打印,每一層打印到一行。
/*** 劍指 Offer 32 - II. 從上到下打印二叉樹 II* 從上到下按層打印二叉樹,同一層的節(jié)點(diǎn)按從左到右的順序打印,每一層打印到一行。*/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;}測試結(jié)果:
3,9,20,null,null,15,7
[[3], [9, 20], [15, 7]]
如果你使用for (int i=0;i<queue.size(); i++) {}
測試結(jié)果:
3,9,20,null,null,15,7
[[3, 9], [20, 15], [7]]
明顯就是錯(cuò)的,就是因?yàn)樵诔绦蜻€沒有出for循環(huán)之前,queue.size()變大了。
還有一點(diǎn)要特別注意,不能使用
if(root==null){return null;}這樣當(dāng)輸入是[],即root=null的時(shí)候,輸出是null,實(shí)際應(yīng)該返回的是[]。
劍指 Offer 32 - III. 從上到下打印二叉樹 III
請實(shí)現(xiàn)一個(gè)函數(shù)按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。
思想:層序遍歷 + 雙端隊(duì)列(奇偶層邏輯分離)
總結(jié)
以上是生活随笔為你收集整理的剑指 Offer 32 . 从上到下打印二叉树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql5.7空间运算,深度解析MyS
- 下一篇: IP地址与子网掩码基础