財神娛樂首存即享優惠回饋唷~詳情請進👉

《數據布局》第五章樹以及二叉樹 樹的操作示例代角子虎碼1

妞妞運氣

為了人人認識樹的操作,現參照講義給出一個樹的存儲操作示例。

將上面的樹存入計算機,并前序以及后序輸入各個結點數據。為了便利,本樹輸出結點數據為整數。

#include <iostream>
using namespace std;
const int Max = 100;

//---------------------------------------//
//-------     界說結點類型   ------------//
//---------------------------------------//
struct TNode
{
  int data;
  TNode *firstchild,*rightsib;
};

//---------------------------------------//
//-------      聲明樹類tree  -539開獎結果-----------//
//---------------------------------------//
class Tree
{
public:
	Tree( );
	~Tree( ){Release(root);}          //析構函數,開釋各結點的存儲空間
	void PreOrder( ){PreOrder(root);}
	void PostOrder( ){PostOrder(root);}
private:
	TNode *root;
	void P玩運彩reOrder(TNode *bt);
	void PostOrder(TNode *bt);
	void Release(TNode *bt);
};

//---------------------------------------//
//-------  樹類tree的函數界說 -----------//
//---------------------------------------//
Tree::Tree( )
{
	TNode *Q[Max] = {NULL};           //初始化行列步隊 
	int mom = 0,child = 0;
	int front = -1,rear = -1;
	TNode *p = NULL,*q = NULL;
	cout<<公眾輸出根的數據:"大眾;
	cin>>mom;
	p = new TNode; p->data =mom;         //確立根結點
	p->firstchild = p->rightsib = NULL;  //根結點左孩以及后兄弟指針為空
	root = p;                            //root指向根
	Q[++rear] = p;                        //根指針入隊 
    cout<<公眾輸出每一個雙親以及后代對,以空格分隔,輸出0透露表現收場:公眾;
	cin>>mom;                              //輸出雙親后代對
	cin>>child;
 
	while (mom != 0 || child != 0)       
	{	p = new TNode; p->data = child;     //確立后代結點
		p->firstchild = p->rightsib = NULL;
		Q[++rear] = p;                      //后代指針入隊
		while (front < rear)
		{
			q = Q[front + 1];               //取隊頭指針元素
			if (q->data != mom)             //隊頭數據不是輸出的數據對的雙親
				front++;                    //隊頭指針后移,出隊
			else 
			{
				if (q->firstchild == NULL)
					q->firstchild = p;          //接上第一個孩子
				else
				{ while (q->rightsib != NULL)     //接右孩子
					q = q->rightsib;
					q->rightsib = p;
				}
				break;
			}
		}
		cout<<"大眾輸出每一個雙親后代對,以空格分隔:輸出0透露表現收場:"大眾;
		cin>>mom;
    	cin>>child;
	}
}

void Tree::Release(TNode *bt)
{
	if (bt == NULL)  return;     //遞回挪用的收場前提
	else
	{
		Release(bt->firstchild);  //后序遞回開釋bt的第一棵子樹  
		Release(bt->rightsib);    //后序遞回開釋bt的右兄弟子樹  
		delete bt;                //開釋根結點
	}
}

void Tree::PreOrder(TNode *bt)
{
	if (bt == NULL)  return;  六合彩怎麼算   //遞回挪用的收場前提
	else
	{
		cout<<bt->data<<"大眾  "大眾;         //走訪根結點的數據域
		PreOrder(bt->firstchild);    //前序遞回遍歷root的第一棵子樹    
		PreOrder(bt->rightsib);      //前序遞回遍歷root的右兄弟子樹  
	}
}

void Tree::PostOrder(TNode *bt)
{
	if (bt == NULL)  return;         //遞回挪用的收場前提
	else
	{
		PostOrder(bt->firstchild);  //后序遞回遍歷root的第一棵子樹  
		PostOrder(bt->rightsib);    //后序遞回遍歷root的右兄弟子樹六合彩中獎金額  
		cout<<bt->data<<"大眾  "大眾;         //走訪根結點的數據域
	}
}

//---------------------------------------//
//----------    主函數     --------------//
//---------------------------------------//
int main( )
{	Tree t1;                               //界說一棵樹工具t1  
	cout<<"大眾前序遍歷序列:"大眾<<endl;
	t1.PreOrder();
	cout<<endl;
	cout<<"大眾后序遍歷序列:"大眾<<endl;
	t1.PostOrder();
	cout<<endl;
	return 0;
}

運轉后:輸出 數據序列:

輸出根: ? ? ? ? ? ? ? ? ? ? ? ? ? 1

輸出數據雙親后代對:【1 ? ?2】【1 ? 3】【1 ? 4】【2 ? 5】【2 ? ?6】【2 ? ?7】 【3 ? ?8】【4 ? 9】【4 ? ?10 】

輸出收場標記 ? ? ? ? ? ? ? ? ? ? 0 ? ? ?0

運轉后輸入效果為:

? ? 前序遍歷序列: ? 1 2 5 6 7 3 8 4 9 10

? ? 后序遍歷序列: ?5 6 7 2 8 3 9 10 4 1

請人人闡發效果;祝人人寫法式勝利!

【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。