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递归调用代码

    五、二叉树初赛例题

  • 相关阅读:
    解决IE6不支持position:fixed的bug
    响应式Web设计基础
    多行文本溢出显示省略号(…)全攻略
    解读CSS布局之-水平垂直居
    理解CSS中BFC
    七个你可能不了解的CSS单位
    屏蔽系统热键钩子Hook程序
    Win 2008 r2 远程桌面多用户登陆,一用户多登陆配置
    把Excel转换成DataTable,Excel2003+
    DataGridView不显示未绑定的列-AutoGenerateColumns
  • 原文地址:https://www.cnblogs.com/elisa02/p/13537990.html
Copyright © 2011-2022 走看看