poj 1577 二叉查找树

本文介绍了一种从给定的字符串序列中逐步重建二叉查找树的方法,并通过先根遍历输出树的结构。重点在于如何通过递归地插入节点来构造树,并注意字符型数组的操作细节。

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

题意:
	将一棵二叉查找树的所有叶子节点去掉(Falling Leaves)
	按照顺序用一个字符串给出
	再将剩下的树如上操作,直到根节点被作为字符串给出。
	任务是还原这棵树,并先根遍历输出。
 
一道入门的二叉查找树问题 ,主要就是考查插入操作。
关键还是要注意字符型二维数组的操作。
之前就是因为忘了给内循环计数器归零 调试了好久才解决。
 

 

#include<iostream>
using namespace std;
char str[26][26];
struct node{
	char data;
	node* left;
	node* right;
};
node* root=new node;
void Insert(node* p){
	node* y = NULL;
	node* x = root;
	while(x!=NULL){
		y=x;
		if((p->data)<(x->data)) x=x->left;
		else x=x->right;	
	}
	if(y==NULL){
		root=p;
	}
	else if(p->data<y->data){
		y->left=p;
	}
	else{
		y->right=p;
	}
}
void perorder(node* p){
	if(p!=NULL){
		cout<<p->data;
		perorder(p->left);
		perorder(p->right);
	}
}
int main(){
	while(1){
		int i=0;
		int j=0;
		int k=0;
		int count=0;
		scanf("%s",&str[i]);
		while(str[i][0]!='*'&&str[i][0]!='$'){
			i++;
			scanf("%s",&str[i]);
		}
		k=i-1;
		root->data=str[k][0];
		root->left=NULL;
		root->right=NULL;
		k--;
		while(k>=0){
			j=0;
			while(str[k][j]!='\0'){
				node* s=new node;
				s->left=NULL;
				s->right=NULL;
				s->data=str[k][j];
				Insert(s);
				j++;
			}
			k--;
		}
		perorder(root);
		cout<<endl;
		if(str[i][0]=='*') continue;
		else break;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值