二叉樹的遍歷(2)--先序遍歷,中序遍歷,後序遍歷(非遞歸)

  • 先序遍歷
    public static void preOrderUnRecur(Node head) {
        System.out.print("pre-order: ");
        if (head != null) {
            Stack<Node> stack = new Stack<Node>();
            stack.add(head);
            while (!stack.isEmpty()) {
                head = stack.pop();
                System.out.print(head.value + " ");
                if (head.right != null) {
                    stack.push(head.right);
                }
                if (head.left != null) {
                    stack.push(head.left);
                }
            }
        }
        System.out.println();
    } 

下面是一個應用:

從上往下打印出二叉樹的每個節點,同層節點從左至右打印。

  public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> list=new ArrayList<Integer>();
            if(root==null){
                return list;
            }
            ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>();//隊列,先進先出
            queue.add(root);
            while(!queue.isEmpty()){
                TreeNode t=queue.poll();
                list.add(t.val);
                if(t.left!=null){
                    queue.add(t.left);
                }
                if(t.right!=null){
                    queue.add(t.right);
                }
            }

        return list;
    }

有的時候遞歸方法並不能很好的實現,就需要使用非遞歸的方法(申請一個函數棧用來存儲)

待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章