关闭

二叉树的遍历(2)--先序遍历,中序遍历,后序遍历(非递归)

标签: 非递归二叉树遍历
83人阅读 评论(0) 收藏 举报
分类:
  • 先序遍历
    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;
    }

有的时候递归方法并不能很好的实现,就需要使用非递归的方法(申请一个函数栈用来存储)

待续。。。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7302次
    • 积分:619
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档