2013-03-17---二叉树递归,非递归实现(附代码)深度,叶子节点数量,逐行打印二叉树
来源:互联网 发布:studio美图软件 编辑:程序博客网 时间:2024/06/03 01:30
昨天晚上没有发文章,说来话长啊,昨天不知道是csdn的问题,还是我的问题,我访问了半天,访问不上网站啊,后来12点多了,就睡了。上一篇文章说到了二叉树的先序,中序,后序遍历问题,这次还是说的简单的一点,说计算二叉树的深度,和叶子节点数量
int ceng(Node *pRoot)//计算层数,递归实现{int left = 0;int right = 0;int res = 0;if (pRoot == NULL){return 0;}if (pRoot->pLeft != NULL){left = ceng(pRoot->pLeft);}if (pRoot->pRight != NULL){right = ceng(pRoot->pRight);}res = left > right ? left : right;return res + 1;}
class CengNode{public:int n = 0;Node *p = NULL;CengNode(int now, Node *p) :n(now), p(p){}};int cengstack(Node *pRoot)//计算深度,非递归实现{stack<CengNode> mystack;Node *pnow = pRoot;mystack.push(CengNode(1, pRoot));int res = 0;while (false == mystack.empty()){CengNode now = mystack.top();mystack.pop();if (now.n > res){res = now.n;}if (now.p->pRight != NULL){mystack.push(CengNode(now.n + 1, now.p->pRight));}if (now.p->pLeft != NULL){mystack.push(CengNode(now.n + 1, now.p->pLeft));}}return res;}
int getyenum(Node *pRoot)//计算叶子节点数,递归实现{int left = 0;int right = 0;if (pRoot == nullptr){return 0;}if (pRoot->pLeft == NULL && pRoot->pRight == NULL){return 1;}if (pRoot->pLeft != nullptr){left = getyenum(pRoot->pLeft);}if (pRoot->pRight != nullptr){right = getyenum(pRoot->pRight);}return left + right;}
int getyenumstack(Node *pRoot)//计算叶子节点数,非递归实现{stack<Node *> mystack;Node *pnow = NULL;mystack.push(pRoot);int res = 0;while (false == mystack.empty()){pnow = mystack.top();mystack.pop();if (pnow != NULL){if (pnow->pLeft == NULL && pnow->pRight == NULL){res += 1;}else{if (pnow->pRight != NULL){mystack.push(pnow->pRight);}if (pnow->pLeft != NULL){mystack.push(pnow->pLeft);}}}}return res;}
void hengprintqueue(Node *pRoot)//逐行打印,非递归,队列实现{queue<Node *> myqueue;myqueue.push(pRoot);Node *pnow = NULL;while (false == myqueue.empty()){pnow = myqueue.front();myqueue.pop();if (pnow != NULL){cout << pnow->data << " ";if (pnow->pLeft != NULL){myqueue.push(pnow->pLeft);}if (pnow->pRight != NULL){myqueue.push(pnow->pRight);}}}}
void hengprintstack(Node *pRoot)//逐行打印,非递归,栈实现{stack<Node *> mystack;stack<Node *> mystacktemp;mystack.push(pRoot);Node *pnow = NULL;bool flag = true;while (false == mystacktemp.empty() || false == mystack.empty()) {if(false == mystack.empty()){pnow = mystack.top();mystack.pop();if (pnow != NULL){cout << pnow->data << " ";mystacktemp.push(pnow->pLeft);mystacktemp.push(pnow->pRight);}}else{while (false == mystacktemp.empty()){mystack.push(mystacktemp.top());mystacktemp.pop();}}}}
自己感觉这些代码,还算是二叉树里面比较简单的吧,具体的就不解释了,相信大家还是都能理解的,递归的好理解,栈就是我们手动模拟递归的过程啊。
说说这几天的感受,说好的15号结束c++啊,今天都17号了,其实这个东西不能急功近利啊,真的是只能慢慢来,从上个月18号开始的c++吧,不知不觉过了1个月了,其实现在感觉c++的语言还好吧,主要是基本功,数据结构,还有设计模式,因为以前用别的语言做过打的项目,所以其实设计模式还好,主要就是数据结构,树和图,还有n种排序算法,所以这几天真的发现越学东西越多啊,总之,这个坎是要迈过去的,我要在6月之前尽力搞啊,时间也算是够长的,具体的看自己了。
基础不牢地动山摇,如果想要好的offer,好的工作就要努力啊,加油吧。明天还要调整一下学习计划,复习一下,我们一起搞,搞cocos2dx,搞数据结构,搞设计模式,
我去刷牙了,一会儿就睡觉了。
0 0
- 2013-03-17---二叉树递归,非递归实现(附代码)深度,叶子节点数量,逐行打印二叉树
- 二叉树,递归、非递归遍历,求深度,输出叶子节点
- 二叉树第K层叶子节点个数 -- 采用递归和非递归方法实现
- 二叉树的前、中、后序遍历(递归和非递归)、层序遍历、深度、叶子节点个数
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- Java二叉树的递归,非递归遍历,高度,节点数,叶子节点数
- Java二叉树的递归,非递归遍历,高度,节点数,叶子节点数
- java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)
- 二叉树递归、非递归求深度
- 二叉树的深度,递归和非递归实现
- 求二叉树深度 -- 递归和非递归实现
- 二叉树的节点个数和深度(非递归)
- 二叉树非递归求深度和节点个数
- 2015-03-15---二叉树递归(非递归)实现先序、中序、后序遍历(附代码)
- 二叉树的各种操作的(递归非递归)的实现,如(递归非递归)先序后序中序层次遍历 二叉树的高度 叶子节点数,所有节点数
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 飞机大战-5
- Swift基础语法: 27 - Swift的全局变量和局部变量, 类型属性, 获取和设置类型属性的值
- 整理有用的Android开发资源
- Uinity学习的一些知识点
- FlappyBird后期完善
- 2013-03-17---二叉树递归,非递归实现(附代码)深度,叶子节点数量,逐行打印二叉树
- 打印fibonacci数列
- 分享几个AndroidSDK镜像源
- start_kernel分析
- 推荐算法
- 通过socket发送结构体
- 黑马程序员——堆和栈的区别(转载)
- 如何学习Java_不走弯路,就是捷径
- HDU 3308 LCIS(线段树区间合并)