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

本文介绍了一种基于输入整数序列构建二叉排序树的方法,并实现了前序、中序和后序遍历。通过去除重复元素确保树的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

输入描述:

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

输出描述:

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

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

示例1

输入

复制

5
1 6 5 9 8

输出

复制

1 6 5 9 8 
1 5 6 8 9 
5 8 9 6 1 

题目表述可能不明确,这边“输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。” 的意思是,在建立搜索树的时候,就将重复的排除掉,重复的就不用插入到树里面了。

 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

struct Btree
{
    int x;
    Btree *left;
    Btree *right;
    Btree()
    {
        left=NULL;
        right=NULL;
    }
};
typedef struct Btree Btree;
Btree *root;
int n;
int vis[10000];

void Insert(int x,Btree *&r)
{
    if(r==NULL)
    {
        r=new Btree;
        r->x=x;
    }
    else
    {
        if(x<r->x)
        {
            Insert(x,r->left);
        }
        else
        {
            Insert(x,r->right);
        }
    }
}

void xian(Btree* r)
{
    if(r==NULL)
    {
        return ;
    }
    printf("%d ",r->x);
    xian(r->left);
    xian(r->right);
}

void zhong(Btree* r)
{
    if(r==NULL)
    {
        return ;
    }
    zhong(r->left);
    printf("%d ",r->x);
    zhong(r->right);
}

void hou(Btree* r)
{
    if(r==NULL)
    {
        return ;
    }
    hou(r->left);
    hou(r->right);
    printf("%d ",r->x);

}

int Find(int x,Btree *r)
{
    if(r==NULL)
    {
        return 0;
    }
    else
    {
        if(r->x==x)
        {
            return 1;
        }
        else
        {
            int left= Find(x,r->left);
            int right=Find(x,r->right);
            return left+right;
        }
    }
}


int main()
{
    while(scanf("%d",&n)==1)
    {
        root=NULL;
        for(int i=0;i<n;i++)
        {
            int x;
            scanf("%d",&x);
            if(Find(x,root)==0)
            {
                Insert(x,root);
            }
        }
        xian(root);
        printf("\n");
        zhong(root);
        printf("\n");
        hou(root);
        printf("\n");

    }
    return 0;
}

 

构建一个接收整数并构建二叉排序树的程通常包含以下几个步骤: 1. **定义数据结构**:首先,你需要定义一个二叉树节点的数据结构,它包含整数值、左孩子和右孩子的引用。 ```python class TreeNode: def __init__(self, value): self.value = value self.left = None self.right = None ``` 2. **插入操作**:当接收到一个整数时,你可以创建一个新的节点并将值放入适当的位置以保持排。从根节点开始比较,如果新值小于当前节点,就往左子树添加;反之则往右子树添加。 ```python def insert(root, value): if root is None: return TreeNode(value) else: if value < root.value: root.left = insert(root.left, value) else: root.right = insert(root.right, value) return root ``` 3. **遍历展示**:为了查看整个二叉排序树,可以使用递归遍历方法如前、中后序遍历。 4. **删除节点**:删除节点时需要考虑多种情况: - 如果要删除的节点没有子节点,直接将其父节点的引用设置为空即可。 - 如果只有一个子节点,将该子节点替换到父节点位置。 - 如果有两个子节点,则找到其右子树中的最小节点(左子树的最大节点),用这个最小节点替换被删除节点,并递归地在右子树中删除那个最小节点。 ```python def delete_node(root, value): if root is None: return root if value < root.value: root.left = delete_node(root.left, value) elif value > root.value: root.right = delete_node(root.right, value) else: # 删除节点的情况分析 if root.left is None and root.right is None: root = None elif root.left is None: temp = root.right root = None return temp elif root.right is None: temp = root.left root = None return temp else: min_value = find_min_value(root.right) root.value = min_value root.right = delete_node(root.right, min_value) return root def find_min_value(node): while node.left: node = node.left return node.value ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值