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

首頁 > 編程 > C++ > 正文

C++ 數據結構完全二叉樹的判斷

2020-01-26 14:05:59
字體:
來源:轉載
供稿:網友

C++ 數據結構完全二叉樹的判斷

完全二叉樹(Complete Binary Tree):若設二叉樹的深度為h,除第h層外,其他各層(1~h-1)的節點數都達到最大個數,第h層所有的節點都連續集中在最左邊,這就是完全二叉樹。完全二叉樹由滿二叉樹而引起來的。對于深度為K的,有n個節點的二叉樹,當且僅當每一個節點都與深度為K的滿二叉樹中編號從1到n的節點一一對應時稱之為完全二叉樹。

注意:滿二叉樹一定是完全二叉樹,但完全二叉樹不一定是滿二叉樹。

完全二叉樹的特點:完全二叉樹的效率極高,堆是一種完全二叉樹或者近似完全二叉樹,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能優化。

判斷完全二叉樹的方法:從上圖我們可以看出,完全二叉樹可能會出現以下情況:左子樹存在,右子樹不存在;左子樹存在,有字數存在;左、右子樹都不存在;所以我們可以利用廣度優先遍歷(層序遍歷)將二叉樹進行遍歷,設置一個標志位,當遇到一個空節點時,將標志位為修改;當后面在遇到有效節點并且標志位被修改時,則該二叉樹不是完全二叉樹。

當該二叉樹為空時、修改標志位后無有效節點時,該二叉樹為完全二叉樹。

代碼實現:

#include<iostream> using namespace std; #include<queue>  template<class T> struct TreeNode //二叉樹結點 {   T _value;   TreeNode<T>* _left;   TreeNode<T>* _right;   TreeNode(const T& value)     :_value(value)     , _left(NULL)     , _right(NULL)   {} };   template<class T> bool Is_completeTree(TreeNode<T>* node) {   queue<TreeNode<T>*> q;   if (node != NULL)   {     q.push(node);     TreeNode<T>* cur = NULL;     bool flag = false; //設置標志位     while (!q.empty())     {       cur = q.front();       q.pop();       if (cur)       {         if (flag)           return false;         q.push(cur->_left);         q.push(cur->_right);       }       else         flag = true; //修改標志位     }     return true;   }   return true; } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巫山县| 耒阳市| 泰州市| 宜州市| 石景山区| 乳源| 平利县| 江口县| 岐山县| 桃源县| 收藏| 乌兰浩特市| 蓝山县| 边坝县| 白玉县| 乃东县| 辰溪县| 阿克苏市| 镇坪县| 土默特右旗| 长治市| 内乡县| 若羌县| 松溪县| 青川县| 石家庄市| 望城县| 观塘区| 鄂托克前旗| 邯郸市| 高淳县| 长沙县| 辽宁省| 天镇县| 新丰县| 绥中县| 东阿县| 连州市| 聂荣县| 武清区| 榆树市|