求助,如何用指针判断左右子树的存在
  • 板块学术版
  • 楼主LoR_Zhong
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/9/30 12:39
  • 上次更新2023/10/27 09:28:54
查看原帖
求助,如何用指针判断左右子树的存在
443512
LoR_Zhong楼主2022/9/30 12:39

蒟蒻想将二分插入排序改进一下,于是用二叉树来模拟插入,其中左节点的权值小于根节点的权值,右节点的权值大于等于根节点的权值,这样就能中序遍历输出有顺序的数了。

他用指针指向一个根节点个左子树和右子树,然而他不知道怎么判断左右子树的存在,所以向 dalao 们求助。

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct Tree {
	int value;
	int No;
	Tree *Tleft=NULL,*Tright=NULL;
	void In_order() {
		if(this->Tleft) this->Tleft->In_order();
		cout<<this->value<<" ";
		if(this->Tright) this->Tright->In_order();
	}
}qqsort[1000];
void insert(Tree x){
	int _No=1;
	int root=qqsort[_No].value;
	while(true){
		if(x.value<root){
			if(qqsort[_No].Tleft!=NULL){
				root=qqsort[_No].Tleft->value;
				_No=qqsort[_No].Tleft->No;
			}else{
				qqsort[_No].Tleft=&x;
				return;
			}
		}else{
			if(qqsort[_No].Tright!=NULL){
				root=qqsort[_No].Tright->value;
				_No=qqsort[_No].Tright->No;
			}else{
				qqsort[_No].Tright=&x;
				return;
			}
		}
	}
}
int main(){
    int n;
	cin>>n;
	cin>>qqsort[1].value;
	qqsort[1].No=1;
	for(int i=2;i<=n;i++){
		qqsort[i].No=i;
		cin>>qqsort[i].value;
		insert(qqsort[i]);
	}
	qqsort[1].In_order();
}

如果有其他错误也麻烦指出,谢谢。

2022/9/30 12:39
加载中...