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

非递归方式实现二叉树后序遍历_二叉树递归遍历二叉树前序遍历对于一种数据结构而言,我们最常见的就是遍历,那么关于二叉树我们该如何去遍历呢?请看大屏幕。。。。上图是一棵二叉树,前序遍历结果: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网上书城项目总结(servlet_jsp+javaBean)

    网上书城项目总结(servlet_jsp+javaBean)          网上书城项目总结1项目大纲设计:需求分析系统设计详细设计权限设计2技术选型:Servlet+jsp+javaBeanListener+Filter+jstl+fileupload+c3p0+dbutils+mysql3开发顺序:  从dao层到service层再到web层网上书城需求分析:分别对管理员,普通用户,系统三个用户…

    2022年7月27日
    17
  • python 画图–简单开始及折线图[通俗易懂]

    python 画图–简单开始及折线图[通俗易懂]python画图一、环境准备      linuxubuntu下需安装下面三个包:         Numpy,Scipy,Matplotlib     分别输入下面的代码进行安装:pipinstallnumpypipinstallscipysudoapt-getinstallpython-matpl

    2022年5月29日
    37
  • Linux安装vim命令

    Linux安装vim命令最近在Linux上使用vim编辑器编写shell脚本的时候,遇到了这样一个问题,如下:-bash:vim:commandnotfound这是因为vim命令没有安装,于是我从网上搜索了很多关于安装vim命令的教程,不过大都比较繁琐,如今介绍一种简单的方法,大家可以试一下。首先,执行如下命令进行查询:rpm-qa|grepv…

    2025年8月11日
    3
  • 2020年最佳恶意软件删除工具Top 10「建议收藏」

    2020年最佳恶意软件删除工具Top 10「建议收藏」恶意软件删除工具可以帮助你从个人计算机中删除危险的恶意软件,从而避免受到黑客的攻击并防止以后的攻击隐患。保障你的电脑或笔记本电脑的安全性是非常重要的,因为你永远不知道攻击者何时会对你的设备发起攻击。所以,这意味着你不仅需要杀毒软件,还需要一个恶意软件删除工具。比如,广告软件和间谍软件有很大的不同之处,它们不是病毒。因此,仅查出设备是否已受到恶意软件的影响是远远不够的,而且采用手动删除的方法也是非常不切实际的。故此,恶意软件清除已成为一个普遍的问题。如今,恶意软件感染越来越普遍化,即便你自认为..

    2022年6月24日
    71
  • chinese zodiac signs_icpc铜奖

    chinese zodiac signs_icpc铜奖输入23 14 3输出Impossible2 1 4 33 4 1 24 3 2 1题解 找规律+构造#include<bits/stdc++.h>using namespace std;const int N = 1001;int ch[N][N];int lowbit(int x){ return x & (-x);}int main(){ int n,k; int T; cin>>T; ..

    2022年8月9日
    8
  • 华为ensp安装包_华为服务器安装系统教程

    华为ensp安装包_华为服务器安装系统教程什么是eNSPeNSP是由华为公司研发并且免费供大家使用的图形化网络操作平台,主要是对各大企业的网络。路由器,以及交换机路由器进行模拟,呈现一个真实的场景,让用户能模拟练习网络技术!软件特点还原实景1,可模拟华为的AR路由器,部分交换机以及客户端实现企业网和运营商的图面呈现2,可以模拟客户机终端,云,中继交换机等3,仿真设备功能,快速的学习华为命令。快速了解华为命令4,可以通过真实网卡实现与真实设备的对接5,模拟接口抓包,可以很直观的看到协议的交互过程。具体图文安装步骤详解..

    2022年10月14日
    3

发表回复

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

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