二叉树的六种遍历方式

一、递归实现前序、中序以及后序遍历

1 void printTree(node *T)
2 {
3     if(T)
4     {
5         printTree(T->left);
6         cout<<T->val;//调整输出节点T的顺序,可分别实现前序,后序
7         printTree(T->right);
8     }
9 }

二、循环实现前序、中序以及后序遍历

思路参见文章:

http://blog.csdn.net/ns_code/article/details/12977901

(1)前序

 1 void Pre_treverse(node *T)
 2 {
 3     stack<node *> STA;
 4     node *p=T;
 5     while(p || !STA.empty())
 6     {
 7         cout<<p->val;
 8         STA.push(p);
 9         p=p->left;
10         while(p==NULL && !STA.empty())
11         {
12             p=STA.top();
13             p=p->right;
14             STA.pop();
15         }
16     }
17 }

(2)中序

 1 void in_traverse(node *T)
 2 {
 3     stack<node *> STA;
 4     node *p=T;
 5     while(p || !STA.empty())
 6     {
 7         if(p->left)
 8         {
 9             STA.push(p);
10             p=p->left;
11         }
12         else
13         {
14             cout<<p->val<<endl;
15             p=p->right;
16             while(!p && !STA.empty())
17             {
18                 p=STA.top();
19                 cout<<p->val<<endl;
20                 STA.pop();
21                 p=p->right;
22             }
23         }
24     }
25 }

(3)后序

 1 void beh_traverse(node *T)
 2 {
 3     stack<node *>STA;
 4     node *p;
 5     node *pre=NULL;
 6     STA.push(T);
 7     while(!STA.empty())
 8     {
 9         p=STA.top();
10         if((p->left==NULL && p->right==NULL) || ((pre==NULL)&&(pre==p->left || pre==p->right)))
11         {
12             cout<<p->val<<endl;
13             STA.pop();
14             pre=p;
15         }
16         else
17         {
18             if(p->right)
19                 STA.push(p->right);
20             if(p->left)
21                 STA.push(p->left);
22         }
23     }
24 }
时间: 2024-10-14 22:37:20

二叉树的六种遍历方式的相关文章

Java实现二叉树及相关遍历方式

Java实现二叉树及相关遍历方式 在计算机科学中.二叉树是每一个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被用于实现二叉查找树和二叉堆. 下面用Java实现对二叉树的先序遍历,中序遍历,后序遍历.广度优先遍历.深度优先遍历.转摘请注明:http://blog.csdn.net/qiuzhping/article/details/44830369 package com.qiuz

[数据结构]二叉树创建与遍历

实验报告:二叉树创建与遍历 一.问题描述 二叉树是一种实用范围很广的非线性结构,一棵非空二叉树有也只有一个根结点,每个结点最多有两个子树,我们称为左子树与右子树,当一个结点的左.右子树都是空的时,沃恩称此结点为叶子结点. 二叉树有一些很好的性质,这里不再赘述.考虑如何存储一棵树,本实验选择使用链式存储结构——二叉链表:如果事先知道需要存储的二叉树是满二叉树或者完全二叉树,则可以考虑使用顺序存储,否则将浪费大量的存储空间. 对于一棵既成的二叉树,有三种遍历方式——先序.中序与后序.可以证明,一棵形

二叉树总结—建树和4种遍历方式(递归&amp;&amp;非递归)

今天总结一下二叉树,要考离散了,求不挂!二叉树最重要的就是 建立.4种遍历方式,简单应用,如何判断两颗二叉树是否相似 二叉树分为 :1.完全二叉树  2.满二叉树 结构性质: 1).满二叉树 高度为h ,节点数则为 2^h - 1,且叶子节点全在最下层,且叶子节点数为2^(n-1)个{n代表二叉树层数,也叫深度} 2).n个节点的 完全二叉树 深度为 int(log2n)(以2为底n的对数)+ 1: 3).非空二叉树 叶子节点个数==双分支节点数+1 4).非空二叉树 某节点编号 n  若有左孩

重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现

读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点 用 数组下标表示法 表示一个节点 二叉树的主要方法 二叉树的创建 二叉树的添加元素 二叉树的删除元素 二叉树的清空 获得二叉树的高度 获得二叉树的节点数 获得某个节点的父亲节点 二叉树的遍历 先序遍历 中序遍历 后序遍历 遍历小结 总结 树的分类有很多种,但基本都是 二叉树 的衍生,今天来学习下二

折半查找/二分查找 以及二叉树的 三种遍历方式

二分查找   线性查找 1.二分查找 public class BinarySearch { /** * 二分查找 * @param data * @return */ public int binarySearch(long[] data,long n) { //左右 端点 int left =0; int right =data.length-1; //中间元素 int mid=-1; while(left<right){ // 有两种情况 1.left = right 2. left>r

[数据结构与算法] 二叉树及其遍历方式

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4289830.html 一.数据结构分类 (一)按逻辑结构 集合(无辑关系) 线性结构(线性表):数组.链表.栈.队列 非线性结构:树.图.多维数组 (二)按存储结构 顺序(数组)储结构.链式储结构.索引储结构.散列储结构 二.二叉树相关性质

二叉树的三种遍历方式的循环和递归的实现方式

///////////////////头文件:BST.h//////////////////////// #ifndef BST_H #define BST_H #include "StdAfx.h" #include<iostream> #include<stack> template<typename DataType> class BST { public: class Node { public: Node(int data=0):m_dat

二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式

二叉树的遍历方式: 1.深度优先:递归,非递归实现方式 1)先序遍历:先访问根节点,再依次访问左子树和右子树 2)中序遍历:先访问左子树,再访问根节点吗,最后访问右子树 3)后序遍历:先访问左子树,再访问右子树,最后访问根节点 2.广度优先     按照树的深度,一层一层的访问树的节点 1 package Solution; 2 3 import java.util.LinkedList; 4 import java.util.Queue; 5 import java.util.Stack; 6

通过两种深度优先遍历方式重建二叉树或者得到其余一种遍历方式

重建二叉树的方法有很多种,但是并不是通过任意两种深度优先遍历方式都可以重建二叉树,它也是有限制的. 通过前序+中序.后序+中序.层序+中序这三种方式是可以重建二叉树的,但是通过前序+后序.前序+层序.后序+层序这三种方式是不能重建二叉树的.本文重点讲解通过前序+中序的方式重建二叉树的基本思想以及具体的代码实现. 基本思想 中序遍历的第一个节点是root节点,在前序遍历中找到root, root的前半段就是root的左子树的前序遍历(长度M), root的后半段就是root的右子树的前序遍历(长度