二叉树的遍历(JAVA)---前序、中序、后序、层序

二叉树对象:

    class TreeNode {
		int val;
		TreeNode left;
		TreeNode right;
		TreeNode(int x) {
			val = x;
		}
	}

前序、中序、后序:

最初看到二叉树遍历时,第一反应就是从上往下一层一层的遍历,也就是所谓的层序遍历。后来看了许多博客的遍历顺序,就很纳闷,这个莫名其妙的顺序是怎么记得住的,再后来明白了,也就很简单了。二叉树的前序、中序、后序遍历都依赖于递归,通俗的说,就是在前面打印还是在中间打印,异或在后面打印罢了。所以,每次对应不同的树,都是根据如下代码推导出遍历顺序的,千万别死记。

// 前序
public static void print (TreeNode node) {
	if (node != null) {
		System.out.println(node.val);
		print(node.left);
		print(node.right);
	}
}

// 中序
public static void print (TreeNode node) {
	if (node != null) {
		print(node.left);
		System.out.println(node.val);
		print(node.right);
	}
}

// 后序
public static void print (TreeNode node) {
	if (node != null) {
		print(node.left);
		print(node.right);
		System.out.println(node.val);
	}
}

层序:

层序就是按照我们正常的思维来进行遍历,也就是从上往下,从左往右,一层一层的,故称层序。遍历看起来简单,写起来就相对麻烦点,需要借助栈来实现。先将第一层的node存入栈中,然后将其弹出,获取对应value,然后将其 left 和 right 存入栈中,以此类推,每次保证栈中存有下一层的所有node。

// 层序遍历
public ArrayList<Integer> print(TreeNode root) {
    ArrayList<Integer> resultList = new ArrayList<>();
    if (root == null) {
        return resultList;
    }
    Queue<TreeNode> q = new LinkedList<>();
    q.add(root);
    while (!q.isEmpty()) {
        TreeNode nowNode = q.peek();
        q.poll();
        resultList.add(nowNode.val);
        if (nowNode.left != null) {
            q.add(nowNode.left);
        }
        if (nowNode.right != null) {
            q.add(nowNode.right);
        }
    }
    return resultList;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值