非递归方式对二叉树进行前序、中序、后序遍历(C++实现)
前言
二叉树的遍历在面试中非常常见,大多数同学都可以写出其递归遍历方式,然而真正有难度的是非递归的遍历方式,自己在面试的时候也遇到过这种情况,下面来分享下自己实现的三种非递归遍历二叉树的源代码~
源代码
首先对树节点进行定义:
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++实现)相关推荐
- 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)
本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...
- 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)
分别用递归和非递归方式实现二叉树先序.中序和后序遍历 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点.我们约定:先序遍历顺序 为根.左.右;中序遍历顺序为左.根.右;后序遍历顺序为左 ...
- java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...
- C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本
本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...
- 用非递归方式实现二叉树中序遍历
先序遍历:中.左.右 中序遍历:左.中.右 后序遍历:左.右.中 比如下面这科树 1 2 3 4 5 6 7 package com.sangfor.tree;public ...
- 用非递归方式实现二叉树后序遍历
先序遍历:中.左.右 中序遍历:左.中.右 后序遍历:左.右.中 比如下面这科树 1 2 3 4 5 6 7 package com.sangfor.tree; publi ...
- 用非递归方式实现二叉树先序便利
先序遍历:中.左.右 中序遍历:左.中.右 后序遍历:左.右.中 比如下面这科树 1 2 3 4 5 6 7 package com.sangfor.tree; publi ...
- 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】
1.前序遍历 #include <iostream> #include <vector> #include <queue> #include <algorit ...
- 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】
1.前序遍历 // 解题思路:利用栈的原理实现以迭代方法来前序遍历(根左右)二叉树 class Solution { public:vector<int> preorderTraversa ...
- java数据结构学习笔记-二叉树前、中、后序遍历
public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...
最新文章
- python sort函数key_Python:s.sort([cmp[, key[, reverse]]])
- 华为又一战略级生态启程:华为IdeaHub 使能千行百业
- ubuntu16.04安装英伟达(NVIDIA)驱动——run文件安装
- log4net在winform中release后不工作的原因
- 设计模式实践-策略模式
- 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权-百度版...
- 【LCT】历史(P4338)
- 实验吧Web-易-天网管理系统(php弱类型,==号)
- C语言课后习题(3)
- 杭电计算机组成实验2(二)超前进位加法器设计实验
- sql注入pythonpoco_ctf学习
- 整个社会总嫌自己不够“快”,为啥?
- 讯飞输入法pad版x86_讯飞输入法Pad版x86版
- 国产CPU 申威1621 异数OS基础组件理论性能测试报告
- zookeeper添加ip白名单
- D类音频功放(CS8120例)
- 反脆弱·从不确定性中获益---管理?
- 如何在自己的网站加入qq在线交谈功能
- PyCharm 使用 Sublime-Monokai 配色方案
- FinTech头条丨神州信息四项大数据产品成功通过权威测评认定