java实现二叉树的前序、中序、后序、层次遍历,递归与非递归

二叉树的前序、中序、后序、层次遍历,递归与非递归实现。在实现时,需要注意递归思想以及在非递归实现时使用了什么数据结构,以及为什么使用这些数据结构!好记性不如烂笔头,坐下笔记!

构建二叉树的数据结构

/**
 * 构建二叉树的数据结构
 *
 * @author wolf
 * @create 2018-07-29    18:09
 */
public class BinaryTree {
    int val;
    BinaryTree left;
    BinaryTree right;

    public BinaryTree(int val) {
        this.val = val;
    }
}

前序遍历的 递归与非递归实现

递归实现

实现思路:先根节点,再左节点,最后右节点。构建递归时有两个要点需要特别注意,一是递归结束的条件,一是递归表达式(即递归如何进行下去)。

 /**
     * 前序遍历递归方式实现
     * 递归适应思想,构建递归时有两个要点需要特别注意,一是递归结束的条件,一是递归表达式(即递归如何进行下去)
     *
     * @param root 二叉树的根节点
     */
    public void preorderBT(BinaryTree root) {
        //结束条件
        if (root == null)
            return;
        //递归主体
        System.out.print(root.val + " ");
        preorderBT(root.left);
        preorderBT(root.right);

    }

 

非递归实现

非递归实现思路:二叉树遍历的递归实现很简单,也很容易理解,在进行非递归实现时,需要用到栈这种数据结构(为什么是栈,不是别的数据结构)。因为递归实现的过程就是程序自己在处理圧栈和弹栈,改用非递归实现时,用栈模拟系统的圧栈与弹栈,就可以了。具体代码如下,结合注释看, 可以很容易理解。

/**
     * 前序遍历非递归方式实现
     * 非递归实现思路:二叉树遍历的递归实现很简单,也很容易理解,在进行非递归实现时,需要用到栈这种数据结构(为什么是栈,不是别的数据结构)。
     * 因为递归实现的过程就是程序自己在处理圧栈和弹栈,改用非递归实现时,用栈模拟系统的圧栈与弹栈,就可以了。
     */
    public List<Integer> preorderBT1(BinaryTree root) {
        List<Integer> preorderResu
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值