查找二叉树

//----.h

struct TreeNode;
typedef TreeNode*PtrToNode;
typedef PtrToNode Tree;
typedef PtrToNode SearchTree;
typedef PtrToNode Position;
typedef int Elementype;
#ifndef _BinFineTRee_
#define _BinFineTRee_
class Tree_
{
	SearchTree Root;
public:
	Tree_();
	//~Tree_();
	void ERROR(char*);
	SearchTree MakeEmpty(SearchTree T);
	Position Find(Elementype E, SearchTree T);
	Position FindMin(SearchTree T);
	Position FindMax(SearchTree T);
	SearchTree Insert(Elementype E, SearchTree T);
	SearchTree Delete(Elementype E, SearchTree T);
	Elementype Retrieve(Position P);
	void Traverse(SearchTree 树根Root,int 树深度);
	void Visit(SearchTree 树根Root, int 树深度);
};
#endif // !_BinFineTRee_

//----.cpp



#include"BitTraverseTree.h"
#include<iostream>
using namespace std;
struct TreeNode{
	Elementype Elem;
	Tree LC;
	Tree RC;
};

void Tree_::ERROR(char*ch){
	cout << ch << endl;
	exit(1);
}

Position Tree_::Find(Elementype E, SearchTree T){
	if (T == NULL)
		return NULL;
	if (E < T->Elem)
		return Find(E, T->LC);
	else if (E>T->Elem)
		return Find(E, T->RC);
	else return T;
}

SearchTree Tree_::MakeEmpty(SearchTree T){
	if (T == NULL)
		return NULL;
	MakeEmpty(T->LC);
	MakeEmpty(T->RC);
	delete T, T = NULL;
	return NULL;
}

SearchTree Tree_::Insert(Elementype E, SearchTree T)
{
	if (T == NULL)
	{
		T = new TreeNode;
		if (T == NULL)
			ERROR("New TreeNode Error cause Out of space!!!");
		else
		{
			T->Elem = E;
			T->LC = T->RC = NULL;
		}
	}
	else if (E < T->Elem)
		T->LC=Insert(E, T->LC);
	else if (E>T->Elem)
		T->RC=Insert(E, T->RC);
	/*else T->Elem==E, do nothing ,return */
	return T;
}

SearchTree Tree_::Delete(Elementype E, SearchTree T)
{
	if (T == NULL)
		cout << "Not find the Elemente!\n";
	else if (E < T->Elem)
		T->LC = Delete(E, T->LC);
	else if (E>T->Elem)
		T->RC = Delete(E, T->RC);

	else if (T->LC&&T->RC)		
	{//----E==T->Elem,待删除点(数据结构与应用C语言第二版Page77页图示);
		Position TmpMinP = FindMin(T->RC);
		T->Elem = TmpMinP->Elem;
		T->RC = Delete(T->Elem, T->RC);
	}
	else
	{//----俩个包含无孩子的情况;
		Position TmpP = T;
		if (T->LC == NULL)
			T = T->RC;
		else if (T->RC == NULL)
			T = T->LC;
		delete TmpP, TmpP = NULL;
	}
	return T;
}

Elementype Tree_::Retrieve(Position P){
	if (P == NULL)
		return NULL;
	return P->Elem;
}

Position Tree_::FindMin(SearchTree T){
	if (T == NULL)
		return NULL;
	else if (T->LC == NULL)
		return T;
	else
		return FindMin(T->LC);
}

Position Tree_::FindMax(SearchTree T){
	if (T != NULL)
	while (T->RC != NULL)
		T = T->RC;

	return T;
}

Tree_::Tree_(){
	Root = new TreeNode;
	if (Root == NULL)
		ERROR("New TreeNode Error!\n");
	else
	{
		int Rval = 5;
		int IVArray[10] = { 4,2,7,3,9,1,6, 5,0,8 };

		cout << "顶点是" << Rval << ",输入的是:\n";
		for (int i = 0; i != 10; i++)
			cout<<IVArray[i]<<',';
		cout << endl;

		Root->Elem = Rval;
		Root->LC = Root->RC = NULL;
		for (int i = 0; i != 10; i++)
			Insert(IVArray[i], Root);
	}
	//Delete(2, Root);
	Delete(11, Root);
	Delete(9, Root);
	Traverse(Root, 0);
}

void Tree_::Traverse(SearchTree T,int Level){
	if (T == NULL)
		return;
	else
	{
		Visit(T, Level);
		Traverse(T->LC,Level+1);
		Traverse(T->RC,Level+1);
	}
}
	
void Tree_::Visit(SearchTree T, int Level){
	cout << "第"<<Level<<"层是:  "<<T->Elem << endl;
}


//-----main.cpp

<strong><span style="font-size:24px;">#include"BitTraverseTree.h"</span>
#include<conio.h>
using namespace std;

int main(){
	Tree_ T1;
	return _getch();
}</span></strong>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值