用递归与迭代完成二叉树的三种遍历

news2024/9/27 9:23:41

目录

二叉树的前序遍历

题目

前序遍历题目链接

递归代码

1.利用方法返回值的代码

2.返回值为void的代码

非递归实现前序遍历(利用栈stack) 

1.利用方法返回值的代码

2.返回值为void的代码 

二叉树的中序遍历

题目

:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

中序遍历题目链接

递归代码

1.利用方法返回值的代码

2.返回值为void的代码

非递归实现中序遍历(利用栈stack) 

1.利用方法返回值的代码

2.返回值为void的代码 

二叉树的后序遍历

题目

后序遍历题目链接

递归代码

1.利用方法返回值的代码

2.返回值为void的代码

非递归实现中序遍历(利用栈stack) 

1.利用方法返回值的代码

2.返回值为void的代码

完结撒花✿✿ヽ(°▽°)ノ✿✿


遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问          前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点--->根的左子树--->根的右子树。
中序遍历(Inorder Traversal)——根的左子树--->根节点--->根的右子树。
后序遍历(Postorder Traversal)——根的左子树--->根的右子树--->根节点

二叉树的前序遍历

题目

:给你二叉树的根节点 root ,返回它节点值的 前序 遍历   

前序遍历题目链接

: https://leetcode.cn/problems/binary-tree-preorder-traversal/    

递归代码

1.利用方法返回值的代码

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<Integer>();
        if(root==null){
            return ret;
        }
        ret.add(root.val);
        List<Integer> leftTree=preorderTraversal(root.left);
        ret.addAll(leftTree);
        List<Integer> rightTree=preorderTraversal(root.right);
        ret.addAll(rightTree);
        return ret;
        }
}

2.返回值为void的代码

    // 前序遍历  根  左子树  右子树
    public void preOrder(BTNode root) {
        if (root == null) {
            return;
        }
        System.out.print(root.value + " ");
        preOrder(root.left);
        preOrder(root.right);
    }

非递归实现前序遍历(利用栈stack) 

1.利用方法返回值的代码

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        TreeNode cur = root;
        Deque<TreeNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
              //System.out.print(cur.val + " ");
                ret.add(cur.val);
                cur = cur.left;
            }
            TreeNode top = stack.pop();
            cur = top.right;
        }
        return ret;
    }
}

2.返回值为void的代码 

class Solution { 
    public void preOrderNor(BTNode root) {
        if (root == null) {
            return;
        }
        BTNode cur = root;
        Deque<BTNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                System.out.println(cur.value + " ");
                cur = cur.left;
            }
            BTNode top = stack.pop();
            cur = top.right;
        }
    }
}

二叉树的中序遍历

题目

:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

中序遍历题目链接

:https://leetcode.cn/problems/binary-tree-inorder-traversal/ 

递归代码

1.利用方法返回值的代码

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        List<Integer> leftTree = inorderTraversal(root.left);
        ret.addAll(leftTree);
        ret.add(root.val);
        List<Integer> rightTree =inorderTraversal(root.right);
        ret.addAll(rightTree);
        return ret;
    }
}

2.返回值为void的代码

    // 中序遍历  左子树  根  右子树
    public void inOrder(BTNode root) {
        if (root == null) {
            return;
        }
        inOrder(root.left);
        System.out.print(root.value + " ");
        inOrder(root.right);
    }

非递归实现中序遍历(利用栈stack) 

1.利用方法返回值的代码

class Solution{
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        TreeNode cur = root;
        Deque<TreeNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            TreeNode top = stack.pop();
            ret.add(top.val);
            cur = top.right;
        }
        return ret;
    }
}

2.返回值为void的代码 

class Solution{    
    public void inOrderNor(BTNode root) {
        if (root == null) {
            return;
        }
        BTNode cur = root;
        Deque<BTNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            BTNode top = stack.pop();
            System.out.println(top.value + " ");
            cur = top.right;
        }
    }
}


二叉树的后序遍历

题目

:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 

后序遍历题目链接

:https://leetcode.cn/problems/binary-tree-postorder-traversal/

递归代码

1.利用方法返回值的代码

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<Integer>();
        if(root==null){
            return ret;
        }
        List<Integer> leftTree = postorderTraversal(root.left);
        ret.addAll(leftTree);
        List<Integer> rightTree = postorderTraversal(root.right);
        ret.addAll(rightTree);
        ret.add(root.val);
        return ret;
     }
}

2.返回值为void的代码

    // 后序遍历
    public void postOrder(BTNode root) {
        if (root == null) {
            return;
        }
        postOrder(root.left);
        postOrder(root.right);
        System.out.print(root.value + " ");
    }

非递归实现中序遍历(利用栈stack) 

1.利用方法返回值的代码

class Solution{
     public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        TreeNode cur = root;
        TreeNode prev = null;
        Deque<TreeNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            TreeNode top = stack.peek();
            if (top.right == null || top.right == prev) {
                //System.out.println(top.value + " ");
                ret.add(top.val);
                stack.pop();
                prev = top;
            } else {
                cur = top.right;
            }
        }
        return ret;
    }
}  

2.返回值为void的代码

class Solution{  
    public void postOrderNor(BTNode root) {
        if (root == null) {
            return;
        }
        BTNode cur = root;
        BTNode prev = null;
        Deque<BTNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            BTNode top = stack.peek();
            if (top.right == null || top.right == prev) {
                System.out.println(top.value + " ");
                stack.pop();
                prev = top;
            } else {
                cur = top.right;
            }
        }
    }
}

完结撒花✿✿ヽ(°▽°)ノ✿✿

                           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小红书数据分析:如何借势热点ip,打造爆款热度笔记

导语 影视作为小红书的后起板块之一&#xff0c;今夏来势汹汹~众多「爆款」影视/电影的出现极大程度上刺激着社区用户保持发布欲望&#xff0c;抬升了用户碎片化表达的意愿&#xff0c;刺激了小红书社区内容的活跃度。 小红书独有的社区特色&#xff0c;让影视作品除了解说外…

冠霖团队与TPC公司线下会议共谋TPC资产管理基金项目合作

近年来&#xff0c;金融市场蓬勃发展&#xff0c;为全球各大金融机构提供了前所未有的合作机会。在这个背景下&#xff0c;冠霖团队和TPC公司的线下会议成为一场引人瞩目的合作洽谈&#xff0c;旨在共同探讨TPC资产管理基金项目的合作机会与前景。 TPC公司作为一个拥有广泛国际…

3D模型格式转换工具如何与Parasolid集成?

概述 HOOPS Exchange包括一个 Parasolid 连接器&#xff0c;它允许 Parasolid 开发人员轻松地将 CAD 数据导入到活动的 Parasolid 会话中。如果源数据基于 Parasolid&#xff08;NX、Solid Edge 或 SolidWorks&#xff09;&#xff0c;则数据将按原样导入。 这意味着您可以假…

京东门详一码多端探索与实践 | 京东云技术团队

本文主要讲述京东门详业务在支撑过程中遇到的困境&#xff0c;面对问题我们在效率提升、质量保障等方向的探索和实践&#xff0c;在此将实践过程中问题解决的思路和方案与大家一起分享&#xff0c;也希望能给大家带来一些新的启发 一、背景 1.1、京东门详介绍 1.1.1、京东门…

python怎么下载以前的版本,python怎么下载第三方库

大家好&#xff0c;给大家分享一下python怎么下载以前的版本&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; Python 下载安装&#xff08;文末附python全套学习资料&#xff09; 安装python分三个步骤&#xff1a;1.下载python 2.安装pyth…

计网第三章(数据链路层)(二)

目录 一、可靠传输 二、可靠传输的三种实现机制 1.停止等待协议SW&#xff08;自动重传协议ARQ&#xff09; &#xff08;1&#xff09;理想情况&#xff08;即无差错情况&#xff09;&#xff1a; &#xff08;2&#xff09;有误码的情况&#xff1a; &#xff08;3&#…

Python中5种下划线的含义,你都知道吗

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 话不多说&#xff0c;直接开搞&#xff0c;如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 1.单前导下划线&#xff1a;_var 当涉及到变量和方法名称时&#xff0c;单个下划线前缀有一个约定俗成的含义。 它是对程…

【04 英语语法:非谓语动词(不定式、分词、动名词)详解】

非谓语动词 非谓语动词&#xff1a;不定式&#xff0c;分词&#xff0c;动名词1. 不定式&#xff1a;动词原形&#xff08;do/原形不定式&#xff09;&#xff0c;带 to 不定式 &#xff08;to do&#xff09;1.1 带 to 不定式&#xff08;to do&#xff09;的功能&#xff1a;…

Apipost预执行脚本如何调用外部jar包

近期版本更新中Apipost推出插件管理&#xff0c;可以直接在预、后执行脚本中调用本地的脚本文件 导入脚本 在「系统设置」—「插件管理」中打开目录将要执行的脚本文件拖入到文件夹下 执行脚本 需要获取请求参数&#xff1a; const requestData request.request_bodys; 在…

版本控制工具Git集成IDEA的学习笔记(第二篇GitHub)

目录 一、团队内协作和跨团队协作讲述 1、团队内协作 2、跨团队协作 二、团队内合作交互方式 1、初始化本地库 2、创建远程库 3、在本地创建远程库地址的别名 4、推送操作 5、克隆操作 6、邀请加入团队&#xff0c;push操作 7、远程库修改的拉取操作 8、远程库修改…

【Vue】yarn 安装包时权限不足或者文件夹被占用导致安装失败

在一个 Vue3 项目中&#xff0c;用 yarn 安装 Vue 插件或者 Vue-Router 时&#xff0c;出现同样的 error &#xff0c;如下&#xff1a; An unexpected error occurred: “EPERM: operation not permitted, unlink ‘C:\Codefield\项目\yupao-frontend\node_modules\esbuild\w…

zabbix配置微信报警

如有错误&#xff0c;敬请谅解&#xff01; 此文章仅为本人学习笔记&#xff0c;仅供参考&#xff0c;如有冒犯&#xff0c;请联系作者删除&#xff01;&#xff01; 6.1 注册企业微信 企业微信注册地址&#xff1a;https://work.weixin.qq.com 设置总部门名称添加成员 也可以…

小程序项目组件的基本应用

宿主环境&#xff1a;程序运行必须依赖的环境 小程序的宿主环境 ---->手机微信(定位、扫码、支付等) 小程序的通信模型&#xff1a; 渲染层和逻辑层之间的通信(微信客户端转发)逻辑层和第三方服务器之间的通信(微信客户端转发) 小程序的运行机制&#xff1a; 启动&#xff1…

chrome屏幕共享插件的获取和配置

文章目录 1. 下载插件2. 加载插件3. 打开这个文件4. 关掉开发者模式 1. 下载插件 https://github.com/webrtc/samples/blob/gh-pages/release/desktopCaptureExtension.zip 不过我下载不了&#xff0c;找别人要了这个文件 解压 2. 加载插件 选择 扩展程序—》管理扩展程序 加…

拥抱变革 展现PMO力量 | 易趋受邀出席2023第十二届中国PMO大会

2023年8月12-13日&#xff0c;由PMO评论主办的第十二届中国PMO大会&#xff08;以下简称PMO大会&#xff09;在北京成功落幕。 &#xff08;主论坛一现场&#xff09; 本届大会以“拥抱变革 展现PMO力量”为主题&#xff0c;设置了“PMO与组织变革”、“PMO与组织战略”2个主论…

vueuse常用方法

useDateFormat 时间格式化 <script setup lang"ts">import { useNow, useDateFormat } from vueuse/coreconst formatted useDateFormat(useNow(), YYYY-MM-DD HH:mm:ss)</script><template><div>{{ formatted }}</div> </templa…

【爱书不爱输的程序猿】公网访问本地搭建的WEB服务器之详细教程

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本地电脑搭建Web服务器并用cpolar发布至公网访问 前言1. 首先将PHPStudy、WordPress、cpolar下载到电脑2. 安装PHPStudy3. 安装cpolar&#xff0c;进入Web-UI界面4.安装wordpress5.…

赋能智慧零售,美格智能助力升级科技感购物体验

近期&#xff0c;一段消费者在商场使用智能购物车的视频冲上社交平台热搜榜&#xff0c;获得百万点赞&#xff0c;网友纷纷感慨科技进步的速度。许多人会好奇智能购物车和普通购物车有什么区别呢&#xff1f;智能购物车具有用户识别、室内定位、数据采集、精准营销、自助结算、…

低代码PaaS平台源码:基于Kubernetes云原生技术,快速构建企业级应用程序

低代码PaaS平台 低代码PaaS平台可以在云端开发、部署、运行低代码应用程序。使用独立数据库模型&#xff0c;基于Kubernetes云原生技术&#xff0c;每个租户均可拥有一套独立的存储、数据库、代码和命名空间&#xff0c;实现了100%的租户数据隔离&#xff0c;并可以随时迁移到…

【RP2040】香瓜树莓派RP2040之LED

本文最后修改时间&#xff1a;2022年09月05日 11:02 一、本节简介 本节介绍如何编写一个LED驱动。 二、实验平台 1、硬件平台 1&#xff09;树莓派pico开发板 ①树莓派pico开发板*2 ②micro usb数据线*2 2&#xff09;电脑 2、软件平台 1&#xff09;VS CODE 三、版权声…