二叉树的深度和宽度
// 求二叉樹的深度和寬度.cpp : 定義控制臺應用程序的入口點。
#include "stdafx.h"
#include <iostream>
#include <queue>
using namespace std;struct BTNode
{char m_value;BTNode *m_left;BTNode *m_right;
};//先序創建二叉樹
void CreatBTree(BTNode *&root)
{ char nValue = 0;cin >> nValue;if ('#' == nValue){return;}else{root = new BTNode();root->m_value = nValue;CreatBTree(root->m_left);CreatBTree(root->m_right);}
}//求二叉樹的深度
int GetDepth(BTNode *pRoot)
{if (pRoot == NULL){return 0;}// int nLeftLength = GetDepth(pRoot->m_left);// int nRigthLength = GetDepth(pRoot->m_right);// return nLeftLength > nRigthLength ? (nLeftLength + 1) : (nRigthLength + 1);return GetDepth(pRoot->m_left) > GetDepth(pRoot->m_right) ? (GetDepth(pRoot->m_left) + 1) : (GetDepth(pRoot->m_right) + 1);
}//求二叉樹的寬度
int GetWidth(BTNode *pRoot)
{if (pRoot == NULL){return 0;}int nLastLevelWidth = 0;//記錄上一層的寬度int nTempLastLevelWidth = 0;int nCurLevelWidth = 0;//記錄當前層的寬度int nWidth = 1;//二叉樹的寬度queue<BTNode *> myQueue;myQueue.push(pRoot);//將根節點入隊列nLastLevelWidth = 1; BTNode *pCur = NULL;while (!myQueue.empty())//隊列不空{nTempLastLevelWidth = nLastLevelWidth;while (nTempLastLevelWidth != 0){pCur = myQueue.front();//取出隊列頭元素myQueue.pop();//將隊列頭元素出對if (pCur->m_left != NULL){myQueue.push(pCur->m_left);}if (pCur->m_right != NULL){myQueue.push(pCur->m_right);}nTempLastLevelWidth--;}nCurLevelWidth = myQueue.size();nWidth = nCurLevelWidth > nWidth ? nCurLevelWidth : nWidth;nLastLevelWidth = nCurLevelWidth;}return nWidth;
}int _tmain(int argc, _TCHAR* argv[])
{BTNode *pRoot = NULL; CreatBTree(pRoot);cout << "二叉樹的深度為:" << GetDepth(pRoot) << endl;cout << "二叉樹的寬度為:" << GetWidth(pRoot) << endl; system("pause");return 0;
}
轉載于:https://www.cnblogs.com/Vae1990Silence/p/4830625.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: Apache经常使用配置
- 下一篇: 黑马程序员——数组