二叉树的深度和宽度
来源:互联网 发布:mysql insert into 慢 编辑:程序博客网 时间:2024/06/04 14:28
二叉树的深度和宽度
在一个面试题看到的,题目要求是求一棵二叉树的面积。
二叉树面积=二叉树的高 X 二叉树的宽
下面我分别给出求二叉树高度和宽度的函数,这样二叉树的面积就迎刃而解了
CPP:
#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; } 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 nCurLevelWidth = 0;//记录当前层的宽度 int nWidth = 1;//二叉树的宽度 queue<BTNode *> myQueue; myQueue.push(pRoot);//将根节点入队列 nCurLevelWidth = 1; BTNode *pCur = NULL; while (!myQueue.empty())//队列不空 { while (nCurLevelWidth != 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); } nCurLevelWidth--; } nCurLevelWidth = myQueue.size(); nWidth = nCurLevelWidth > nWidth ? nCurLevelWidth : nWidth; } return nWidth;}int main(int argc, char** argv) { BTNode *pRoot = NULL; CreatBTree(pRoot); cout << "二叉树的深度为:" << GetDepth(pRoot) << endl; cout << "二叉树的宽度为:" << GetWidth(pRoot) << endl; system("pause"); return 0; }
运行结果:
0 0
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 二叉树的最大深度和宽度
- 计算二叉树的深度和宽度
- 二叉树的深度和宽度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 二叉树的宽度和深度
- 求二叉树的深度和宽度
- 二叉树的深度和宽度
- 二叉树的宽度和深度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 二叉树的宽度和深度搜索
- 二叉树的深度和宽度
- 二叉树深度和宽度
- 华为练习 求二叉树的宽度和深度
- Android初体验之Monkey和MonkeyRunner
- python list使用
- C语言 typedef总结
- IOS项目打包上传 遇到的问题
- POJ1276 Cash Machine(动态规划)
- 二叉树的深度和宽度
- RBF网络
- jQueryUI的基础知识
- HBase集群+Zookeeper集群安装
- Struts2 与 Spring 的集成
- Unity3d 性能优化遐想 OnBecameVisible/OnBecameInvisible
- 【Java】Java学习进度_W3
- CSS盒模型宽度
- 深度优先搜索