從上往下列印二叉樹(Java實現)
阿新 • • 發佈:2019-01-29
牛客網測試地址:https://www.nowcoder.com/questionTerminal/7fe2212963db4790b57431d9ed259701
從上往下打印出二叉樹的每個節點,同層節點從左至右列印。package go.jacob.test426; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class Demo2 { //迴圈實現 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list=new ArrayList<Integer>(); if(root==null) return list; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(root); 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); } return list; } //遞迴實現 public ArrayList<Integer> PrintFromTopToBottom_2(TreeNode root) { ArrayList<Integer> list=new ArrayList<Integer>(); Queue<TreeNode> queue=new LinkedList<TreeNode>(); if(root==null) return list; queue.add(root); print_2(list,queue); return list; } private void print_2(ArrayList<Integer> list, Queue<TreeNode> queue) { if(!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); }else{ return; } } /* * 錯誤解法:要把左右子節點壓入佇列以後才能遞迴! */ private void print(TreeNode root,Queue<TreeNode> queue,ArrayList<Integer> list) { queue.add(root); TreeNode node=null; if(!queue.isEmpty()){ node=queue.remove(); list.add(node.val); if(node.left!=null) print(node.left,queue,list); if(node.right!=null) print(node.right,queue,list); } } public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } }