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


    一、二叉树基本知识

    二、二叉树先序遍历

    题目:

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

    五、二叉树初赛例题

  • 相关阅读:
    SQLAlchemy(2) -- SQLAlchemy的安装
    SQLAlchemy(1) -- Python的SQLAlchemy和ORM
    http-proxy-middleware及express实现反向代理
    Vue项目中的http请求统一管理
    vue.js中如何使用scss
    Vue 相关开源项目库汇总
    Vue UI组件库
    route按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()
    Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流
    vuejs 和 element 搭建的一个后台管理界面
  • 原文地址:https://www.cnblogs.com/elisa02/p/13537990.html
Copyright © 2020-2023  润新知