题目

解决代码及点评

/*求二叉树深度
*/#include <iostream>
#include <stack>
using namespace std;template<class T>
class BiTNode
{
public:T nValue;BiTNode<T> *pLChild;BiTNode<T> *pRChild;
};
template<class T>
class BiTree
{
public:BiTree();~BiTree();BiTNode<T> *Create();BiTNode<T> *getRoot();void InOrder(BiTNode<T>  *p);void PostOrder(BiTNode<T>  *p);void PreOrder(BiTNode<T>  *p);void Visit(BiTNode<T>  *p);int GetDeep(BiTNode<T>  *p);int GetMaxLengh();private:BiTNode<T> *pRoot;int maxlengh;
};template<class T>
BiTree<T>::BiTree()
{pRoot = new BiTNode<T>;
}template<class T>
BiTree<T>::~BiTree()
{}template<class T>
BiTNode<T> *BiTree<T>::Create()
{T nValue;BiTNode<T> *nRoot;scanf_s("%d", &nValue);if (nValue == 0){nRoot = NULL;}else{nRoot = new BiTNode<T>;if (NULL == nRoot){printf("分配内存失败!\n");}else{nRoot->nValue = nValue;printf("请输入%d结点的左子结点:", nRoot->nValue);nRoot->pLChild = Create();printf("请输入%d结点的右子结点:", nRoot->nValue);nRoot->pRChild = Create();}}pRoot=nRoot;return nRoot;
}template<class T>
void BiTree<T>::Visit(BiTNode<T> *p){cout<< p->nValue;
}
template<class T>
BiTNode<T> *BiTree<T>::getRoot()
{return pRoot;
}
template<class T>
void BiTree<T>::PreOrder(BiTNode<T> *pRoot)
{if (pRoot==NULL){return ;} else{Visit(pRoot);PreOrder(pRoot->pLChild);PreOrder(pRoot->pRChild);}
}
template<class T>
void BiTree<T>::InOrder(BiTNode<T> *pRoot)
{if (pRoot==NULL){return ;} else{PreOrder(pRoot->pLChild);Visit(pRoot);PreOrder(pRoot->pRChild);}
}
template<class T>
void BiTree<T>::PostOrder(BiTNode<T> *pRoot)
{if (pRoot==NULL){return ;} else{PreOrder(pRoot->pLChild);PreOrder(pRoot->pRChild);Visit(pRoot);}
}template<class T>
int BiTree<T>::GetMaxLengh()   //每一个节点左右深度相加比较最大值
{int maxlengh=0;int deep=0;int lengh=0;if (pRoot==NULL){return 0;}if (pRoot==NULL){return 0;} else{lengh = GetDeep(pRoot->pLChild)+GetDeep(pRoot->pRChild)+2;if (maxlengh<lengh){maxlengh=lengh;}}return maxlengh;
}// 求树的深度, 这道题的关键是理解树的递归即可
template<class T>
int BiTree<T>::GetDeep(BiTNode<T>  *pRoot)
{int deep=0;if (pRoot==NULL){return 0;}if (pRoot==NULL){return 0;} else   // 树的深度就是左子树的深度 或者 由子树的深度,取大的再加1即可{if (GetDeep(pRoot->pLChild)>GetDeep(pRoot->pRChild)){deep=GetDeep(pRoot->pLChild)+1;}else deep=GetDeep(pRoot->pRChild)+1;}return deep;
}int main()
{printf("请输入根结点的值:");BiTree<int> pRoot ;pRoot.Create();printf("前序遍历:");pRoot.PreOrder(pRoot.getRoot());cout<<endl;printf("中序遍历:");pRoot.InOrder(pRoot.getRoot());cout<<endl;printf("后序遍历:");pRoot.PostOrder(pRoot.getRoot());cout<<endl<<"深度"<<endl;cout<<pRoot.GetDeep(pRoot.getRoot());//cout<<endl<<"最长距离";//cout<<pRoot.GetMaxLengh();system("pause");return 0;
}

代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn

下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”

2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行

程序运行结果






转载于:https://www.cnblogs.com/new0801/p/6177351.html

基于visual Studio2013解决面试题之0601二叉树深度相关推荐

  1. 基于visual Studio2013解决面试题之0901奇偶站队

     题目 解决代码及点评 /*给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数 解决方法:两边同时遍历,如果遇到左边偶数或者右边基数,则交换 */#include <ios ...

  2. 基于visual Studio2013解决面试题之0403串联字符串

     题目 解决代码及点评 /*有 n个长为 m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环 ...

  3. 基于visual Studio2013解决面试题之0804复杂链表

     题目 解决代码及点评 /*复杂链表的拷贝,现在有一个复杂链表,完成一个clone函数拷贝一个链表复杂链表是指struct Node{struct Node* _next;struct Node ...

  4. 基于visual Studio2013解决面试题之0209最大堆排序

     题目 解决代码及点评 /*最大堆是一个数组数据结构,任意一个下标i,它的值大于i*2和i*2+1的值(i从1开始)当这样的堆形成时,最大值在数组最开始的位置.当这样的堆形成后,将第一个元素交换 ...

  5. 基于visual Studio2013解决面试题之1002公共子串

     题目 解决代码及点评 /*求两个字符串的最小公共子串这道题简单的两个字符串遍历即可 */#include <iostream> using namespace std; const ...

  6. 基于visual Studio2013解决面试题之1007鸡蛋和篮子

     题目 解决代码及点评 /*n个鸡蛋放m个篮子,篮子不能为空,有多少种方法 */#include <iostream> using namespace std; const int ...

  7. 基于visual Studio2013解决面试题之0402合并升序链表并去重

     题目 解决代码及点评 /*两个升序链表合并,并要求去掉重复元素 */ #include <iostream> using namespace std;class LinkNode ...

  8. 基于visual Studio2013解决面试题之0802数字最多元素

     题目 解决代码及点评 /*查找数组中超过一半的那个元素方法1:每次删除数组中一对不相同的value,最后剩下都是想通的数字时,就是超过一半的那个元素了方法2:排序后,取中间元素即可 */#in ...

  9. 基于visual Studio2013解决面试题之0807strstr函数

     题目 解决代码及点评 /*写strstr函数简单的遍历去查找吧 */#include <iostream> #include <stdio.h>const char * ...

最新文章

  1. 【Linux】关于ffmpeg的一些常见用法
  2. Leetcode 171. Excel表列序号 解题思路及C++实现
  3. Hadoop三大核心组件及需求催生大数据技术的背景
  4. KUR-Couriers
  5. mysql 字符串截取_mysql数据库13种常用函数方法总结
  6. vSphere Replication:虚拟机的保护伞
  7. 关于foreven与node.js的使用
  8. stc15f2k60s2单片机控制led流水灯
  9. Ultra Fractal分形艺术作品——璀璨
  10. curl: (6) Could not resolve host: www.huobi.me; Unknown error
  11. Linux内核启动过程和Bootloader
  12. MacOS 下恢复使用谷歌浏览器翻译功能
  13. 吉林大学计算机唐班公示,重要通知|数学学院16级及17级唐敖庆班选拔方案及公示名单...
  14. plc梯形图的c语言写法,PLC梯形图讲解.ppt
  15. 【WiFi破解】WiFi密码不知道了怎么办,一行代码轻松破解
  16. 常用快捷键cmd常用dos命令java安装
  17. 给CSDN小伙伴们带来一款好用的数据恢复——R-Studio v8.15
  18. Think in java(四)枚举类enum的基本特性、构造方法与方法覆盖、Switch语句中的enum运用
  19. matlab程序模拟汽车理论中的数据特性图动力特性图,matlab程序模拟汽车理论中的数据特性图1.doc...
  20. 【0基础】输入cq值即获得可截断的带显著区间的显著水平的表达量柱状图

热门文章

  1. Spring Boot 实战 —— MyBatis(注解版)使用方法
  2. 历届试题 买不到的数目
  3. 在ubuntu14.04 64位虚拟机中安装mysql
  4. 软件测试学习笔记:找代码中的fault,并设计特定的测试用例
  5. 【转载】linux2.6内核initrd机制解析
  6. Elasticsearch 5.3.x 使用 Head 插件
  7. jenkins产生503错误的解决方法
  8. Oracle新建用户赋只读某几张表的权限
  9. sQLserver T-SQL 事务的用法
  10. slf4j 和 log4基础入门(Maven配置)