算法系列之二叉树中序遍历最佳实践你知道吗

1.概念

二叉树中序遍历算法分为递归遍历和非递归遍历2种实现方式。

递归遍历容易理解,但可能会占用较大的栈空间,需防止出现栈溢出。

2.代码

以下以Java语言代码作为示例。

二叉树的节点的数据结构如下:

class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;
    TreeNode(int value) {
        this.value = value;
    }
}

1)递归遍历

public void inorderTraversalRecursive(TreeNode root) {
    // 若root节点为空,则子遍历已完成
        if (root == null) {
            return;
        }
    // 遍历左子树
        inorderTraversalRecursive(root.left);
    // 输出遍历到的节点的值
        System.out.print(root.value + " "); 
    // 遍历右子树
        inorderTraversalRecursive(root.right);    
}

2)非递归遍历

public void inorderTraversalNonRecursive(TreeNode root)
{
  // 此栈存储需要后续处理的节点
    Stack<TreeNode> stack = new Stack<>();
    TreeNode node = root;
    //节点不为空或者栈不为空时需要继续处理
    while(node != null || !stack.empty())
    {
        while(node != null)
        {
      // 1. 保存根节点(方便之后找到并处理右节点)
            stack.push(node);
      // 2. 找到最左节点
            node = node.left;
        }
 
        
        if(!stack.empty())
        {
      // 1. 找到栈顶节点进行处理
            node = stack.pop();
      // 2. 输出遍历到的节点的值
            System.out.println(node.value+" ");
      // 3. 继续处理右子节点
            node = node.right;
        }
    }
}


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值