前言

二叉树的遍历在面试中非常常见,大多数同学都可以写出其递归遍历方式,然而真正有难度的是非递归的遍历方式,自己在面试的时候也遇到过这种情况,下面来分享下自己实现的三种非递归遍历二叉树的源代码~

源代码

首先对树节点进行定义:

struct TreeNode
{int val;TreeNode* left;TreeNode* right;
};

先序遍历:

//树的非递归方式进行先序遍历
vector<int> front_search(TreeNode* root)
{vector<int> res;if (root == NULL) return res;stack<TreeNode*> vec;TreeNode* node = root;while (node || !vec.empty()){while (node){res.push_back(node->val);vec.push(node);node = node->left;}if(!vec.empty() || node){node = vec.top();vec.pop();node = node->right;}}
}

中序遍历:

//树的非递归方式进行中序遍历
vector<int> middle_search(TreeNode* root)
{vector<int> res;if (root == NULL) return res;TreeNode* node = root;stack<TreeNode*> vec;while (node || !vec.empty()){while (node){vec.push(node);node = node->left;}if (!vec.empty()){node = vec.top();vec.pop();res.push_back(node->val);node = node->right;}}
}

后序遍历:

//非递归方式进行后序遍历
vector<int> back_search(TreeNode* root)
{vector<int> res;if (root == NULL) return res;TreeNode* node = root, pre_visited = NULL;stack<TreeNode*> vec;while (node || !vec.empty()){while (node){vec.push(node);node = node->left;}node = vec.top();if (node->right == NULL || node->right == pre_visited){res.push_back(node->val);vec.pop();pre_visited = node;node == NULL;}else{node = node->right;}}
}

非递归方式对二叉树进行前序、中序、后序遍历(C++实现)相关推荐

  1. 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)

    本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...

  2. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)

    分别用递归和非递归方式实现二叉树先序.中序和后序遍历 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点.我们约定:先序遍历顺序 为根.左.右;中序遍历顺序为左.根.右;后序遍历顺序为左 ...

  3. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  4. C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本

    本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...

  5. 用非递归方式实现二叉树中序遍历

    先序遍历:中.左.右 中序遍历:左.中.右 后序遍历:左.右.中 比如下面这科树 1 2       3 4    5   6    7 package com.sangfor.tree;public ...

  6. 用非递归方式实现二叉树后序遍历

    先序遍历:中.左.右 中序遍历:左.中.右 后序遍历:左.右.中 比如下面这科树 1 2       3 4    5   6    7 package com.sangfor.tree; publi ...

  7. 用非递归方式实现二叉树先序便利

    先序遍历:中.左.右 中序遍历:左.中.右 后序遍历:左.右.中 比如下面这科树 1 2       3 4    5   6    7 package com.sangfor.tree; publi ...

  8. 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】

    1.前序遍历 #include <iostream> #include <vector> #include <queue> #include <algorit ...

  9. 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】

    1.前序遍历 // 解题思路:利用栈的原理实现以迭代方法来前序遍历(根左右)二叉树 class Solution { public:vector<int> preorderTraversa ...

  10. java数据结构学习笔记-二叉树前、中、后序遍历

    public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...

最新文章

  1. python sort函数key_Python:s.sort([cmp[, key[, reverse]]])
  2. 华为又一战略级生态启程:华为IdeaHub 使能千行百业
  3. ubuntu16.04安装英伟达(NVIDIA)驱动——run文件安装
  4. log4net在winform中release后不工作的原因
  5. 设计模式实践-策略模式
  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权-百度版...
  7. 【LCT】历史(P4338)
  8. 实验吧Web-易-天网管理系统(php弱类型,==号)
  9. C语言课后习题(3)
  10. 杭电计算机组成实验2(二)超前进位加法器设计实验
  11. sql注入pythonpoco_ctf学习
  12. 整个社会总嫌自己不够“快”,为啥?
  13. 讯飞输入法pad版x86_讯飞输入法Pad版x86版
  14. 国产CPU 申威1621 异数OS基础组件理论性能测试报告
  15. zookeeper添加ip白名单
  16. D类音频功放(CS8120例)
  17. 反脆弱·从不确定性中获益---管理?
  18. 如何在自己的网站加入qq在线交谈功能
  19. PyCharm 使用 Sublime-Monokai 配色方案
  20. FinTech头条丨神州信息四项大数据产品成功通过权威测评认定

热门文章

  1. 【安卓9】数据库升级
  2. asp.net Checkbox 绑定自定义属性
  3. Amazon AWS S3 上传文件 并获取公用url
  4. PHP 后台程序配置config文件,及form表单上传文件
  5. SQL大圣之路笔记——SQL 行转列,列转行
  6. Vanya and Triangles 暴力枚举
  7. C#信息采集系统,常见控件练习
  8. 深入理解Yii2.0 (3)行为(Behavior)
  9. leetcode探索队列和栈(一)
  10. C语言scanf中%%,C语言scanf()和gets()及printf()和puts()的区别