码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树先序、后序、中序遍历

时间:2020-08-26 18:33:00      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:http   click   col   roo   节点   height   ==   没有   pre   

一、二叉树基本知识

技术图片

二、二叉树先序遍历

题目:

输入一个整数n,表示二叉树中结点个数,编号为1~n。
1号结点为二叉树的根节点。然后输入n行,每行包括两个整数,第i行表示编号为i的结点的左、右子节点的编号。
如果某个结点没有左或右子节点,那么对应行的第一、二个整数为0。
输出此二叉树的先序遍历,每行输出一个编号。

技术图片
#include<bits/stdc++.h>
using namespace std;
struct node{
    int left;
    int right;
}nodes[1000001]; 

void ds_pre(int u){
    if(u == 0){
        return;
    }
    cout << u << endl;
    ds_pre(nodes[u].left);
    ds_pre(nodes[u].right);
}

int main(){
    int n;
    cin >> n;
    for(int i = 1;i <= n;i++){
        int left,right;
        cin >> left >> right;
        nodes[i].left = left;
        nodes[i].right = right;
    }
    ds_pre(1);
    return 0;
}
二叉树先序遍历DFS递归调用代码

三、二叉树中序遍历

题目:

输入一个整数n,表示二叉树中结点个数,编号为1~n。
1号结点为二叉树的根节点。然后输入n行,每行包括两个整数,第i行表示编号为i的结点的左、右子节点的编号。
如果某个结点没有左或右子节点,那么对应行的第一、二个整数为0。
输出此二叉树的中序遍历,每行输出一个编号。

简化题目描述:刚才先序遍历时候的输出改为中序遍历的输出 : )

技术图片
#include<bits/stdc++.h>
using namespace std;

struct node{
    int left;
    int right;
}nodes[100001]; 

void ds_md(int u){
    if(u == 0){
        return;
    }
    ds_md(nodes[u].left); 
    cout << u << endl;
    ds_md(nodes[u].right);
}

int main(){
    int n,root;
    cin >> n;
    for(int i = 1;i <= n;i++){
        int left,right;
        cin >> left >> right;
        nodes[i].left = left;
        nodes[i].right = right; 
    }
    ds_md(1);
    return 0;
}
二叉树中序遍历DFS递归调用代码

四、二叉树后序遍历

题目:

输入一个整数n,表示二叉树中结点个数,编号为1~n。
1号结点为二叉树的根节点。然后输入n行,每行包括两个整数,第i行表示编号为i的结点的左、右子节点的编号。
如果某个结点没有左或右子节点,那么对应行的第一、二个整数为0。
输出此二叉树的中序遍历,每行输出一个编号。

简化题目描述:刚才先序遍历时候的输出改为后序遍历的输出 : )

技术图片
#include<bits/stdc++.h>
using namespace std;
bool vis[1000010];
struct node{
    int left;
    int right;
}nodes[10001];

void ds_bk(int u){
    if(u == 0){
        return;
    }
    ds_bk(nodes[u].left);
    ds_bk(nodes[u].right);
    cout << u << endl;
}

int main(){
    int n;
    cin >> n;
    for(int i = 1;i <= n;i++){
        int left,right;
        cin >> left >> right;
        nodes[i].left = left;
        nodes[i].right = right;
    }
    ds_bk(1);
    return 0;
}
二叉树中序遍历DFS递归调用代码

五、二叉树初赛例题

技术图片

技术图片

二叉树先序、后序、中序遍历

标签:http   click   col   roo   节点   height   ==   没有   pre   

原文地址:https://www.cnblogs.com/elisa02/p/13537990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!