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

首頁(yè) > 編程 > C++ > 正文

c++先序二叉樹的構(gòu)建詳解

2020-01-26 13:28:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

二叉樹首先要解決構(gòu)建問(wèn)題,才能考慮后續(xù)的遍歷,這里貼出通過(guò)先序構(gòu)建二叉樹,同時(shí)包含四種二叉樹的遍歷方法(先序,中序,后序,逐層)

第一、定義BinaryTreeNode 類

#include <iostream>#include <string>#include <queue>using namespace std; template<typename T >class BinaryTree;template <typename T> class BinaryTreeNode {public:  friend class BinaryTree<T>;  BinaryTreeNode() {    data = NULL;    lChild = rChild = NULL;  }  BinaryTreeNode(T newdata) {    this->data = newdata;    lChild = rChild = NULL;  }  T getData() {    return data;  }  BinaryTreeNode<T> * getLeftNode() {    return lChild;  }  BinaryTreeNode<T> * getRightNode() {    return rChild;  }  T data;  BinaryTreeNode<T>* lChild;  BinaryTreeNode<T>* rChild;private: };

View Code

第二、定義BinaryTree 類

template <typename T> class BinaryTree {public:  BinaryTreeNode<T> *root;  char* p;  BinaryTree() { root = NULL; }  BinaryTree(T data) {    root = new BinaryTreeNode<T>(data);    root->lChild = NULL;    root->rChild = NULL;  }  ~BinaryTree() {    delete root;  }   //構(gòu)建二叉樹并返回  BinaryTreeNode<T>* CreateTree() {    BinaryTreeNode<int>* bt = NULL;    char t;    cin >> t;    if (t == '#')    {      return NULL;    }    else {      int num = t - '0';      bt = new BinaryTreeNode<T>(num);      bt->lChild = CreateTree();      bt->rChild = CreateTree();    }    return bt;  }   //先序構(gòu)建二叉樹  BinaryTreeNode<T>* PreCreateTree() {    BinaryTreeNode<int>* bt = NULL;    if (this->root == NULL)    {      cout << "請(qǐng)輸入根節(jié)點(diǎn)(#代表空樹):";    }    else {      cout << "請(qǐng)輸入節(jié)點(diǎn)(#代表空樹):";    }    char t;    cin >> t;    if (t == '#')    {      return NULL;    }    else {      int num = t - '0';      bt = new BinaryTreeNode<T>(num);      if (this->root == NULL)      {        this->root = bt;      }      cout << bt->data << "的左孩子";      bt->lChild = PreCreateTree();       cout << bt->data << "的右邊孩子";      bt->rChild = PreCreateTree();    }    return bt;  }     void preOderTraversal(BinaryTreeNode<T> *bt); //先序遍歷  void inOrderTraversal(BinaryTreeNode<T> *bt); //中序遍歷  void postOrderTraversal(BinaryTreeNode<T> *bt);//后序遍歷  void levelTraversal(BinaryTreeNode<T> *bt);  //逐層遍歷 private: }; template <typename T>void BinaryTree<T>::preOderTraversal(BinaryTreeNode<T> *bt) {  if (bt)  {    cout << bt->data;    BinaryTree<T>::preOderTraversal(bt->getLeftNode());    BinaryTree<T>::preOderTraversal(bt->getRightNode());  }} template <typename T>void BinaryTree<T>::inOrderTraversal(BinaryTreeNode<T> *bt) {  if (bt)  {    BinaryTree<T>::inOrderTraversal(bt->getLeftNode());    cout << bt->data;    BinaryTree<T>::inOrderTraversal(bt->getRightNode());  }} template <typename T>void BinaryTree<T>::postOrderTraversal(BinaryTreeNode<T> *bt) {  if (bt)  {    BinaryTree<T>::postOrderTraversal(bt->getLeftNode());    BinaryTree<T>::postOrderTraversal(bt->getRightNode());    cout << bt->data;  }} template <typename T>void BinaryTree<T>::levelTraversal(BinaryTreeNode<T> *bt) {   queue<BinaryTreeNode<T>*> que;  que.push(bt);  while (!que.empty())  {    BinaryTreeNode<T>* proot = que.front();    que.pop();    cout << proot->data;     if (proot->lChild != NULL)    {      que.push(proot->lChild);//左孩子入隊(duì)    }    if (proot->rChild != NULL)    {      que.push(proot->rChild);//右孩子入隊(duì)    }  }}

View Code

第三、主程序運(yùn)行

#include "pch.h"#include <iostream>#include "BinaryTree.h" int main(){  //場(chǎng)景測(cè)試2  BinaryTree<int> btree;  btree.PreCreateTree();//先序構(gòu)建二叉樹  cout << "先序遍歷:";  btree.preOderTraversal(btree.root); cout << endl;//先序遍歷    cout << "中序遍歷:";  btree.inOrderTraversal(btree.root); cout << endl;//中序遍歷  cout << "后序遍歷:";  btree.postOrderTraversal(btree.root); cout << endl;//后序遍歷  cout << "逐層序遍歷:";  btree.levelTraversal(btree.root); }

View Code

最終測(cè)試運(yùn)行截圖

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 儋州市| 宁海县| 天峻县| 桂林市| 内江市| 宁安市| 苏州市| 鄂托克前旗| 祥云县| 蓬溪县| 石楼县| 三都| 邢台县| 上犹县| 湖南省| 句容市| 大悟县| 商丘市| 清水县| 遂昌县| 瑞昌市| 安丘市| 碌曲县| 武陟县| 五常市| 晋宁县| 开鲁县| 永嘉县| 青岛市| 家居| 上虞市| 江油市| 都昌县| 海兴县| 苗栗市| 增城市| 万州区| 昌乐县| 龙里县| 云浮市| 昌图县|