文档章节

二叉树遍历 (先序遍历、中序遍历、后序遍历) 递归

老汉-憨憨
 老汉-憨憨
发布于 2017/03/16 17:43
字数 245
阅读 6
收藏 0

 

#include <iostream>
using namespace std;

// binary tree node
struct Node
{
    int data;
    Node *left,*right;
    Node(int x)
    {
        data = x;
        left = right = NULL;
    }
};

void PreOrderVisitTree(Node *root)
{
    // empty node
    if (!root)
        return;

    cout<<(root->data)<< "\t";
    PreOrderVisitTree(root->left);
    PreOrderVisitTree(root->right);
}

void InOrderVisitTree(Node *root)
{
    // empty node
    if (!root)
        return;

    InOrderVisitTree(root->left);
    cout<<(root->data)<< "\t";
    InOrderVisitTree(root->right);
}

void PostorderVisitTree(Node *root) 
{
    // empty node
    if (!root)
        return;
    PostorderVisitTree(root->left);
    PostorderVisitTree(root->right);
    cout <<(root->data)<< "\t";
}

// Driver code
int main()
{
    Node *root = new Node(1);
    root->left = new Node(3);
    root->left->left = new Node(2);
    root->left->right = new Node(1);
    root->left->right->left = new Node(1);
    root->right = new Node(-1);
    root->right->left = new Node(4);
    root->right->left->left = new Node(1);
    root->right->left->right = new Node(2);
    root->right->right = new Node(5);
    root->right->right->right = new Node(2);
    
    /*前序遍历*/
    cout << "NLR:\t";
    PreOrderVisitTree(root);
    cout << endl;

    /*中序遍历*/
    cout << "LNR:\t";
    InOrderVisitTree(root);
    cout << endl;

    /*后序遍历*/
    cout << "LRN:\t";
    PostorderVisitTree(root); 
    cout << endl;

    return 0;
}

输出结果:

NLR:	1	3	2	1	1	-1	4	1	2	5	2	
LNR:	2	3	1	1	1	1	4	2	-1	5	2	
LRN:	2	1	1	3	1	2	4	2	5	-1	1	

 

© 著作权归作者所有

老汉-憨憨
粉丝 20
博文 322
码字总数 68382
作品 0
深圳
程序员
私信 提问
中序遍历+先/后序遍历创建二叉树

问题描述 (1)任意给出一种二叉树的遍历结果,是否能重建这个树? (2)任意给出两种二叉树的遍历结果,是否能重建这个树? 问题解析 问题(1)显然是不可能的,因为无论任意给出哪一种遍历...

xiaoxiaoxuanao
2017/03/27
0
0
python实现二叉树的遍历以及基本操作

主要内容: 二叉树遍历(先序、中序、后序、宽度优先遍历)的迭代实现和递归实现; 二叉树的深度,二叉树到叶子节点的所有路径; 首先,先定义二叉树类(python3),代码如下:

pandaWaKaKa
06/25
0
0
数据结构-二叉树(1)以及前序、中序、后序遍历(python实现)

上篇文章我们介绍了树的概念,今天我们来介绍一种特殊的树——二叉树,二叉树的应用很广,有很多特性。今天我们一一来为大家介绍。 二叉树 顾名思义,二叉树就是只有两个节点的树,两个节点分...

浩然haoran
07/21
0
0
二叉树基本操作(上)

一、二叉树基本操作 1、二叉树的创建(二叉链) a[] = {1,2,3,’#’,’#’,4,5,’#’,’#’,6,’#’,’#’,7,8,’#’,9,’#’,’#’,’#’};(‘#’代表NULL)。 2、二叉树的遍历 (1)迭代法...

qq_38646470
2018/01/21
0
0
前序中序求后序的java算法

datacube
2016/07/07
215
0

没有更多内容

加载失败,请刷新页面

加载更多

关于运维,该怎么决定它的方向,这个似工作又似兴趣的存在

我之前主要从事网络、桌面、机房管理等相关工作,这些工作使我迷惘,这应该是大多数运维人都经历过的过程; 18年国庆,我从国内前三的消费金融公司裸辞,下海创业,就是想要摆脱这样的困境。...

网络小虾米
1分钟前
0
0
Java Timer的用法

Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("11232"); } }, 200000 , 1000); public void schedule(TimerTask task, long delay......

林词
5分钟前
2
0
使用js动态加载外部js文件以及动态创建script脚本

动态脚本指的是在页面加载时不存在,但将来的某一时刻通过修改该DOM动态添加的脚本。和操作HTML元素一样,创建动态脚本也有两种方式:插入外部文件和直接插入JavaScript代码。 动态加载外的外...

Bing309
12分钟前
2
0
从零开始入门 K8s | Kubernetes 网络概念及策略控制

作者 | 阿里巴巴高级技术专家 叶磊 一、Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法。大家知道 Kubernetes 对于网络具体实现方案,没有什么限制,也没有给出特...

阿里巴巴云原生
16分钟前
2
0
天气获取

本文转载于:专业的前端网站➨天气获取 $.get("http://wthrcdn.etouch.cn/WeatherApi", { citykey: cityCode }, function (d) { //创建文档对象 var parser = new ......

前端老手
16分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部