二叉樹查找不嚴格小於一個值的最大值(返回節點)。


查找一個不嚴格的小於一個值的節點,就是當二叉樹中存在這個節點的時候。直接查找出來,當二叉樹中不存在這個節點的時候查找比這個節點小的,但是在所有小於所查節點中的最大節點。這個程序中使用了棧進行中序遍歷。代碼如下:

 

typedef struct BiTNode{
	int data;
	
	struct BiTNode *lchild,*rchild;
}*BiTree;
struct SqList
{
	int elem[200];//將二叉樹的節點數值存放到這個數組中,暫時定義數組長度爲200
	int length;
};
////////////////////////////////////////////////////////////////////////////
//時間複雜度爲O(1),怎麼找出一個棧裏的最大元素 ,在這裏用順序棧表示,不用鏈棧
#define  MAX_SIZE 100 //定義初始棧的大小
struct Stack
{
	int data; //存放整形數據數據,沒什麼作用
	char character;//存放字符,這兩個沒什麼作用
	BiTNode *Tree_Node;
	
	
};
struct qStack
{
	int i;//計算棧中所存數據的個數
	int stack_size;//順序棧的大小
	Stack *top;
	Stack *base;
};

////////////////////////////////////////////////////////////////////////////
//順序棧
void IniqStack(qStack &s)
{

	s.i=0;
	s.base=s.top=(Stack*)malloc(sizeof(Stack)*MAX_SIZE);//
	s.stack_size=MAX_SIZE;
}
void Push_Tree(qStack &s,BiTNode *p)
{
	if (s.top-s.base>=s.stack_size)
	{
		s.base=(Stack*)realloc(s.base,(s.stack_size+10));//增加十個空間
		s.top++;//頂部上移
		s.stack_size+=10;
	}

	s.top->Tree_Node=p;
	s.i++;
	s.top++;
}
void Pop_Tree(qStack &s,BiTNode *&p)
{
	if (s.i==0)
	{
		printf("棧爲空\n");
	}
	s.top--;
	s.i--;
	p=s.top->Tree_Node;
	s.top->Tree_Node=NULL;
}
bool StackEmpty(qStack s) //判斷棧是否爲空,
{
	if (s.base==s.top)
	{
		return true;
	}
	else
	{
		return false;
	}
}
///////////////////////////////////////////////////////////////////////////
//二叉樹查找不嚴格小於一個值的最大值
void Serch_point(BiTNode *head,int data,BiTNode *&p,qStack s)
{
	int temp;
	//BiTNode *p;
	p=head;
	temp=p->data; //假定temp的最初值是根節點的大小
	while(p||!StackEmpty(s)) //採用中序遍歷,
	{
		if (p)
		{
			Push_Tree(s,p);
			p=p->lchild;
		}
		else
		{
			Pop_Tree(s,p);
			if (data==p->data)
			{
				return; //跳出循環,進入返回p節點
			}else if ((p->data<data)&&(p->data>temp)) //如果在二叉樹不存在data,則尋找最大的節點,temp記錄小於data的最大節點;
			{
				temp=p->data;
			}

			p=p->rchild;
		}
	}
	Serch_point(head,temp,p,s);//遞歸調用尋找最大的值,
 if (p->data>data) //如果最後返回的值大於data的值,則說明。data比所有的節點都要小。則p返回null
 {
  p=NULL;
  return;
 }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章