建立二叉排序树_三种顺序遍历

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:56   2047   0

题目描述

输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。

输入描述:

输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。

输出描述:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

分析

编写insert函数

#include <iostream>
using namespace std;

struct tree_node{
    int data;
    tree_node *left;
    tree_node *right;

    tree_node(int x):data(x), left(NULL), right(NULL){} //初始化一个结点
};


void insert(int x, tree_node *root){
    if(x == root -> data) return;
    if(x < root -> data){
        if(!root -> left)//如果左边为空
            root -> left = new tree_node(x);//则以x建立一个结点,并且插入左边
        else
            insert(x, root -> left);否则,左边不空,递归插入左子树
    }else{
        if(!root -> right)// 右子树为空
            root -> right = new tree_node(x);// 直接插入右边
        else
            insert(x, root -> right);// 否则递归插入右子树
    }
}


void pre_order(tree_node *root){
    if(!root) return; // 树为空 直接返回
    cout << root -> data << " ";//先序遍历,先输出根节点
    pre_order(root -> left); //递归遍历左子树
    pre_order(root -> right);// 递归遍历右子树
}

void in_order(tree_node *root){
    if(!root) return;
    in_order(root -> left);
    cout << root -> data << " ";
    in_order(root -> right);
}

void post_order(tree_node *root){
    if(!root) return;
    post_order(root -> left);
    post_order(root -> right);
    cout << root -> data << " ";
}

int main(){
    int n;
    while(cin >> n){
        int x;
        cin >> x;
        tree_node root(x);
        --n;
        while(n--){
            cin >> x;
            insert(x, &root);
        }
        pre_order(&root); cout << endl;
        in_order(&root); cout << endl;
        post_order(&root);cout << endl;
    }
    return 0;
}

转载于:https://www.cnblogs.com/zhuobo/p/10264461.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP