二叉树之前序、中序、后序遍历(结合图解例题包你看懂)

二叉树之前序、中序、后序遍历

下面遍历以下面这课二叉树为例
在这里插入图片描述
对应每个节点的代码(Java)如下:

Class BinaryTree{
	private int val;
	private BinaryTree left;
	private BinaryTree right;
}

前序遍历

思想

前序遍历,也就是先遍历根结点,再遍历左右结点。
在这里插入图片描述
那么对应遍历顺序应为 1->4->3->2->5

遍历代码

	//前序遍历
    public static void preScan(TreeNode root){
        System.out.println(root.val);
        if(root.left != null){
            preScan(root.left);
        }
        if(root.right != null){
            preScan(root.right);
        }
    }

代码解释: 将根结点传入方法,首先打印根结点的值,再向左遍历左子树,再向右遍历右子树。
直到当前结点的左右结点都为空,结束遍历。

中序遍历

思想

中序遍历,也就是先遍历左结点,再遍历中间节点,最后遍历右结点。
在这里插入图片描述
那么对应遍历顺序应为 3->4->1->5->2

遍历代码

	//中序遍历
    public static void midScan(TreeNode root){
        if(root.left != null){
            midScan(root.left);
        }
        System.out.println(root.val);
        if(root.right != null){
            midScan(root.right);
        }
    }

代码解释: 将根结点传入方法,首先向左遍历左子树,再打印根结点的值,再向右遍历右子树。
直到当前结点的左右结点都为空,结束遍历。

后序遍历

思想

后序遍历,先遍历左结点,再遍历右结点,最后遍历中间节点。
在这里插入图片描述
那么对应遍历顺序应为 3->4->5->2->1

遍历代码

	//后序遍历
    public static void lastScan(TreeNode root){
        if(root.left != null){
            lastScan(root.left);
        }
        if(root.right != null){
            lastScan(root.right);
        }
        System.out.println(root.val);
    }

代码解释: 将根结点传入方法,首先向左遍历左子树,再向右遍历右子树,再打印根结点的值。
直到当前结点的左右结点都为空,结束遍历。

LeetCode简单题

在这里插入图片描述
思路

审题发现,给的这棵二叉树为搜索树,也就是左子结点都小于父结点,右子结点都大于父节点。
发现中序遍历这棵二叉树,得到的值是从小到大的顺序排列的。

那么这就好办了,我们可以创建一个List, 将中序遍历的结果的值放入list中,结果是有序的,那么我们就可以根据下标获取其第几大的节点了。

代码如下:

	public static int kthLargest(TreeNode root, int k) {
        ArrayList<Integer> list = new ArrayList<>();
        if(root != null){
            midGet(root, list);
        }
        //因为列表是升序的,这里用list的长度减去k,就刚好是第k大的数。如果不能理解,你可以把list先反转一下,就是倒序了,那么第k大的就是k-1(因为list下标从0开始嘛)。
        return list.get(list.size() - k); 
    }
    public static void midGet(TreeNode t, List<Integer> list){
        if(t.left != null){
            midGet(t.left, list);
        }
        list.add(t.val);
        if(t.right != null){
            midGet(t.right, list);
        }
    }

总结

  • 二叉树的前中后遍历其实挺简单的,只要记住,前中后修饰的都是根节点,也就是说前序遍历,就是先遍历根,中序就是中间遍历根,后序就是最后遍历根。另外左右是先遍历左边。
  • 通过一道实际的算法题,相信小伙伴对二叉树的遍历掌握更牢固了,又进步了一点点。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值