zoukankan      html  css  js  c++  java
  • 二叉树先序、后序、中序遍历

    一、二叉树基本知识

    二、二叉树先序遍历

    题目:

    输入一个整数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递归调用代码

    五、二叉树初赛例题

  • 相关阅读:
    设计模式 享元模式(池化技术)
    设计模式 混合模式(整体部分模式)
    设计模式 适配器模式
    Flex3示例、 安装 、注册码
    VS2010错误
    转载:glut.h 与 stdlib.h中 的exit()重定义问题的解决
    宿迁软件QQ群(109233721)
    百度地图 开发API接口啦
    Sublime Text 插件个人使用总结&推荐
    sublime text2 使用安装插件中文乱码问题解决
  • 原文地址:https://www.cnblogs.com/elisa02/p/13537990.html
Copyright © 2011-2022 走看看