最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++先序二叉樹的構建詳解

 更新時間:2019年04月22日 08:41:26   投稿:laozhang  
在本篇文章里小編給大家分享了關于c++先序二叉樹的構建的相關知識點,需要的朋友們跟著學習下。

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

第一、定義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;

  }

 

  //構建二叉樹并返回

  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;

  }

 

  //先序構建二叉樹

  BinaryTreeNode<T>* PreCreateTree() {

    BinaryTreeNode<int>* bt = NULL;

    if (this->root == NULL)

    {

      cout << "請輸入根節(jié)點(#代表空樹):";

    }

    else {

      cout << "請輸入節(jié)點(#代表空樹):";

    }

    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);//左孩子入隊

    }

    if (proot->rChild != NULL)

    {

      que.push(proot->rChild);//右孩子入隊

    }

  }

}

View Code

第三、主程序運行

#include "pch.h"

#include <iostream>

#include "BinaryTree.h"

 

int main()

{

  //場景測試2

  BinaryTree<int> btree;

  btree.PreCreateTree();//先序構建二叉樹

  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++ Boost Lockfree超詳細講解使用方法

    C++ Boost Lockfree超詳細講解使用方法

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • Linux網(wǎng)絡編程之基于UDP實現(xiàn)可靠的文件傳輸示例

    Linux網(wǎng)絡編程之基于UDP實現(xiàn)可靠的文件傳輸示例

    這篇文章主要介紹了Linux網(wǎng)絡編程之基于UDP實現(xiàn)可靠的文件傳輸示例,是很實用的技巧,需要的朋友可以參考下
    2014-08-08
  • c/c++拷貝構造函數(shù)和關鍵字explicit詳解

    c/c++拷貝構造函數(shù)和關鍵字explicit詳解

    這篇文章主要介紹了c/c++拷貝構造函數(shù)和關鍵字explicit的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • C++ Qt開發(fā)之使用QTcpSocket實現(xiàn)TCP網(wǎng)絡通信

    C++ Qt開發(fā)之使用QTcpSocket實現(xiàn)TCP網(wǎng)絡通信

    Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,本文主要為大家介紹了如何運用QTcpSocket組件實現(xiàn)基于TCP的網(wǎng)絡通信功能,需要的可以參考下
    2024-03-03
  • C++深入學習之徹底理清重載函數(shù)匹配

    C++深入學習之徹底理清重載函數(shù)匹配

    C++ 不允許變量重名,但是允許多個函數(shù)取相同的名字,只要參數(shù)表不同即可,這叫作函數(shù)的重載,下面這篇文章主要給大家介紹了關于C++深入學習之徹底理清重載函數(shù)匹配的相關資料,需要的朋友可以參考下
    2019-01-01
  • do...while(0)的妙用詳細解析

    do...while(0)的妙用詳細解析

    do...while(0)消除goto語句;通常,如果在一個函數(shù)中開始要分配一些資源,然后在中途執(zhí)行過程中如果遇到錯誤則退出函數(shù),當然,退出前先釋放資源
    2013-09-09
  • MFC模擬實現(xiàn)自定義消息發(fā)送

    MFC模擬實現(xiàn)自定義消息發(fā)送

    在MFC框架下,有很多系統(tǒng)已經(jīng)定義好的消息,例如ON_WM_LBUTTONDOWN()、ON_WM_MBUTTONDOWN()等等。本文將利用這些定義好的消息模擬實現(xiàn)一下消息發(fā)送,需要的可以參考一下
    2022-01-01
  • static全局變量與普通的全局變量的區(qū)別詳細解析

    static全局變量與普通的全局變量的區(qū)別詳細解析

    以下是對static全局變量與普通的全局變量的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-09-09
  • C++深度優(yōu)先搜索的實現(xiàn)方法

    C++深度優(yōu)先搜索的實現(xiàn)方法

    這篇文章主要介紹了C++深度優(yōu)先搜索的實現(xiàn)方法,是數(shù)據(jù)結構中非常重要的一種算法,需要的朋友可以參考下
    2014-08-08
  • C語言實現(xiàn)宿舍管理系統(tǒng)課程設計

    C語言實現(xiàn)宿舍管理系統(tǒng)課程設計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)宿舍管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

民县| 县级市| 原平市| 延庆县| 扎兰屯市| 曲水县| 永善县| 阳谷县| 依兰县| 霍林郭勒市| 尉犁县| 大埔县| 射阳县| 驻马店市| 浑源县| 开阳县| 永德县| 从化市| 武威市| 华宁县| 织金县| 西昌市| 千阳县| 四平市| 边坝县| 长丰县| 宾川县| 闽侯县| 墨玉县| 遂昌县| 临桂县| 壶关县| 余干县| 台东市| 南召县| 宝坻区| 湖南省| 雅江县| 庆阳市| 吉木乃县| 章丘市|