非递归方式实现二叉树后序遍历_二叉树递归遍历

非递归方式实现二叉树后序遍历_二叉树递归遍历二叉树前序遍历对于一种数据结构而言,我们最常见的就是遍历,那么关于二叉树我们该如何去遍历呢?请看大屏幕。。。。上图是一棵二叉树,前序遍历结果:124536咦,我想你可能会异或什么叫做前序遍历,其实很简单,就是按照根-》左-》右的方式去遍历二叉树。首先让我们来看看如何递归的去前序遍历二叉树注:在这里我特别强调一点,在我们二…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

二叉树前序遍历

对于一种数据结构而言,我们最常见的就是遍历,那么关于二叉树我们该如何去遍历呢?

请看大屏幕 。。。。

在这里插入图片描述

上图是一棵二叉树,前序遍历结果:1 2 4 5 3 6
咦,我想你可能会疑惑什么叫做前序遍历,其实很简单,就是按照 根 -》 左 -》 右 的方式去遍历二叉树。

  • 首先让我们来看看如何递归的去前序遍历二叉树
    注:在这里我特别强调一点,在我们二叉树中,如果采用递归的方式,大部分都采用的根左右的方式,即采用子问题的方式,即先处理跟节点,再处理左子树,再处理右子树的这样一种思想

  • 前序递归遍历

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int>v;
    vector<int> preorderTraversal(TreeNode* root) {
        if(root!=NULL){
           v.push_back(root->val);      //将根节点放入容器中
           preorderTraversal(root->left);   //处理左子树
           preorderTraversal(root->right);   //处理右子树
        }
        return v;
    }
};

你没看错,就这么简单,但是是如何递归的你得想清楚,这里我就不做详解了。那么接下来我们再看看非递归的方式

  • 前序非递归遍历
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int>v;
        stack<TreeNode*>s;
        TreeNode* cur=root;
        while(cur!=NULL || !s.empty()){
            while(cur!=NULL){
                v.push_back(cur->val);
                s.push(cur);
                cur=cur->left;
            }
            TreeNode* top=s.top();
            s.pop();
            cur=top->right;
        }
        return  v;
    }
};

这就是前序遍历的非递归方式,这种方式主要是采用栈来完成的。这个过程实在不好画图,所以只能靠大家自行理解了,类似一种搞传销的模式,不断的拉下线。。。。可能比喻不太恰当,不过我感觉还挺像的,哈哈!

All OVER

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195236.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 宿主机能ping通虚拟机,虚拟机ping不通宿主机_本地电脑ping不通虚拟机

    宿主机能ping通虚拟机,虚拟机ping不通宿主机_本地电脑ping不通虚拟机文章目录一、工作环境二、引出问题1、查看虚拟机IP地址2、查看宿主机IP地址3、进入宿主机CMD窗口,Ping虚拟机,结果Ping不通二、产生原因三、解决问题1、打开网络连接对话框2、启动VMnet8虚拟网络3、进入宿主机CMD窗口,Ping虚拟机,可以Ping通四、利用SecureCRT登录虚拟机五、如何让CentOS8虚拟机与主机相互Ping通…

    2022年8月21日
    3
  • 创建自己的个人网站(一)

    创建自己的个人网站(一)在学习过程中,我们想要将自己的作品发布到网上,创建个人网站,以下是个人网站搭建的简单介绍。 (建议建站前,了解常用linux指令)步骤:1.注册域名     2.开通云服务器     3.搭建网站环境     4.发布网站内容     5.域名解析      6.完成ICP备案(本次仅介绍静态网站的搭建,动态网站后续文章详细介绍)1.注册域名  …

    2022年6月23日
    26
  • 想自学Java的速来!孙鑫视频教程百度云盘

    想自学Java的速来!孙鑫视频教程百度云盘MySQL数据库最佳学习线路脑图:一、对MySQL的认识认识Mysql数据库下载安装MySQL软件在Linux系统环境下安装MySQLMySOL体系结构与存储引擎MySQL体系结构QueryCache详解存储引擎InnoDB体系结构InnoDB的三大特性.数据库文件参数文件参数类型错误日志文件(errorlog)二进制日志文件(binarylog)慢查询日志(slowlog)全量日志(generallog)审计日志(auditlog)

    2022年5月16日
    33
  • intellij idea 19.4 激活码(破解版激活)

    intellij idea 19.4 激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    162
  • android怎样换背景图片,手机怎么抠图换背景 安卓和iPhone一键抠图换背景教程

    android怎样换背景图片,手机怎么抠图换背景 安卓和iPhone一键抠图换背景教程原标题:手机怎么抠图换背景安卓和iPhone一键抠图换背景教程转自:电脑百事网果粉俱乐部原创平时很多小伙伴都喜欢拍照嗮图,而很多时候如果想要照片更美,抠图换背景会起到立竿见影的效果。那么,手机怎么抠图换背景?不少小伙伴苦于不懂PS抠图技术,总在羡慕别人。但其实很多人手机上分享的抠图照片都是通过一些APP就能够实现的,小白也可以轻松上手,下面“电脑百事网”干货来啦,教你如何借助APP,在安卓和i…

    2022年5月25日
    44
  • java输出日期格式_java时区转换

    java输出日期格式_java时区转换importorg.joda.time.DateTime;importjava.util.Date;publicvoidsetCreatedDate(DatecreatedDate){this.createdDate=createdDate;}publicvoidsetCreatedDate(finalDateTimecreatedDate){this.createdDa…

    2022年10月24日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号