国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

樹的生成與遍歷

2019-11-17 05:47:55
字體:
來源:轉載
供稿:網友
  上次,應聘兼職時,他們給了我一些題目,其中的一道是,給我們一些數據,讓我們生成樹,并進行先,中,后序遍歷??!有問題的請E-mail:cangzhu@163.com我的這樣做的 ://建立樹的方法是,取數組的中間的數為樹根,左邊的為左子樹,右邊的為右子樹#include "iostream.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define N 10//節點類
class BNode
{
public:
 int data;
 BNode *lchild;
 BNode *rchild; BNode()
  
};//二叉樹類
class BTree
{
PRivate:
 BNode *root;
public:
 //構造函數
 BTree();
 //析構函數
 ~BTree(); //樹的銷毀
 void Destroy(BNode *node);
 
 //生成樹
 bool CreateTree(BNode *node,int data[],int len);
 bool CreateTree(int data[],int len); //遍歷
 //先序
 void FirstSearch(BNode *node);
 void FirstSearch();
 
 //中序
 void MidSearch(BNode *node);
 void MidSearch();
 
 //后序
 void LastSearch(BNode *node);
 void LastSearch();
};//構造函數
BTree::BTree()

 root=new BNode();
}//默認的析構函數
BTree::~BTree()
//樹的銷毀
void BTree::Destroy(BNode *node)
{
 if(!node)
  return; delete node; 
 FirstSearch(node->lchild);
 FirstSearch(node->rchild);
}//遞歸的生成樹
bool BTree::CreateTree(BNode *node,int data[N],int len)
{
 int i;  
 BNode *left=new BNode();
 BNode *right=new BNode(); //分割后,只剩一個數據
 if(len==1)
 {
  node->data=data[0];
  return true;
 }
 //分割后,只剩兩個數據
 if(len==2)
 {
  node->data=data[1];  left=new BNode();
  left->data=data[0];  node->lchild=left;
  node->rchild=NULL;
  return true;
 } //大于等于三個數據
 int mid=(int)(len/2);
 node->data=data[mid];
 node->lchild=left;
 node->rchild=right; //左邊的數據,右邊的數據
 int left_data[N];
 int right_data[N]; //左子樹的遞歸
 for(i=0;i<mid;i++)
 
 CreateTree(left,left_data,mid); //右子樹的遞歸
 for(i=0;i<len-mid-1;i++)
 
 CreateTree(right,right_data,len-mid-1); return true;
}//生成樹的函數
bool BTree::CreateTree(int data[N],int len)
{
 return CreateTree(root,data,len);
}//先序遍歷
void BTree::FirstSearch(BNode *node)
{
 if(!node)
  return; printf("%d ",node->data); 
 FirstSearch(node->lchild);
 FirstSearch(node->rchild);
}
void BTree::FirstSearch()
//中序遍歷
void BTree::MidSearch(BNode *node)
{
 if(!node)
  return;  MidSearch(node->lchild);
 printf("%d ",node->data);
 MidSearch(node->rchild);
}void BTree::MidSearch()
//后序遍歷
void BTree::LastSearch(BNode *node)
{
 if(!node)
  return; LastSearch(node->lchild);
 LastSearch(node->rchild);
 printf("%d ",node->data);
}void BTree::LastSearch()
//測試函數
void main()
{
 BTree *T=new BTree();
 int data[N];
 for(int i=0;i<N;i++)
  data[i]=i;
 T->CreateTree(data,N); 
 T->FirstSearch();
 cout<<endl;
 T->MidSearch();
 cout<<endl;
 T->LastSearch();
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖北省| 屏边| 瑞昌市| 同仁县| 灵山县| 延川县| 乃东县| 舟山市| 彰武县| 竹溪县| 彩票| 靖宇县| 长泰县| 黎川县| 宝应县| 辽阳市| 乡城县| 清流县| 宝清县| 乌兰浩特市| 甘肃省| 饶平县| 嵊泗县| 新化县| 华亭县| 郧西县| 南召县| 永平县| 姚安县| 三亚市| 井冈山市| 应城市| 东乡县| 政和县| 沿河| 丰都县| 巴林右旗| 阿克苏市| 科尔| 榆树市| 乌拉特后旗|