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

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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

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

相关推荐

  1. 算法系列最佳实践知道

    2024-05-02 16:26:02       14 阅读
  2. 的前便利,,后

    2024-05-02 16:26:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-02 16:26:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-02 16:26:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-02 16:26:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-02 16:26:02       20 阅读

热门阅读

  1. Spring Boot可以同时处理多少请求?

    2024-05-02 16:26:02       10 阅读
  2. MacOs安装pyenv环境

    2024-05-02 16:26:02       13 阅读
  3. Docker知识点汇总表格总结

    2024-05-02 16:26:02       12 阅读
  4. 泰勒创造力达到顶峰?(上)

    2024-05-02 16:26:02       12 阅读
  5. Qt和C/C++开发-常见面试笔试题

    2024-05-02 16:26:02       10 阅读
  6. 安徽省建设工程专业技术资格评审标准条件

    2024-05-02 16:26:02       12 阅读
  7. windows重置mysql root密码

    2024-05-02 16:26:02       15 阅读
  8. springBoot核心

    2024-05-02 16:26:02       7 阅读
  9. 使用 Docker-Compose 部署 Kafka

    2024-05-02 16:26:02       12 阅读
  10. 最大公因数和最小公倍数函数(补续)

    2024-05-02 16:26:02       14 阅读