先补习一下二叉树的知识吧(2020-10-3)
二叉树是n个节点构成的集合,可以为空树也可以为非空树
/*空树就没有结点,非空树起码一个节点空树*/
只有一个节点
/*只有一个父亲*/
二叉树的独有特性:
1. 每个结点至多/*注意是至多*/只有两个结点,不存在度大于2的结点
2. 子树有左右之分,次序不可颠倒
/*说白了,和现在二胎政策很像,至多生两个,两个人还分大小次序一样*/
二叉树的5种基本形态(来源于百度)
有两个很重要的概念:宽度和深度
宽度:最多结点数的层中所包含的结点数/*也就是把二叉树画标准,横向最宽的就是宽度*/
深度:所有结点中最深的结点的所在层数/*也就是二叉树的高度,数有多少层*/
现在上剑指offer简单题
输入一棵二叉树,求该树的深度。
从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,
最长路径的长度为树的深度
解析题意:求一个二叉树的深度。
然后此时我就一脸茫然,怎么做呢?
此时你应百度一下,然后就行了,
不用看后续的解析,
多说一句,考的的是递归
上c/c++语言代码
使用递归方法
/*
struct TreeNode {
int val;//这是根
struct TreeNode *left;//左结点
struct TreeNode *right;//右结点
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
/*这里填代码
解析思路,分为四步
第一步:如果是空树,那没有深度,这步最简单,就考了一个二叉树可以非空
**/
if (pPoot == 0)
{
return 0;}
}
/*第二步,递归开始了,先遍历左子树,计算他的深度
第三步,遍历右子树,计算他的深度
第四步,return 左结点和右结点深度中较大那个值,加上1,这里还有你计算最后一个结点,它没有孩子结点了*/
else(pRoot != 0){
ld = GetDeepth(pRoot.leftchild)//第二步
rd = GetDeepth(pRoot.rightchild)//第三步
return ( ld > rd ? ld :rd )+1;//第四步,
//ld > rd ? ld :rd ,问号前为判断条件,条件结果为真返回问号后面冒号前面的,假的就返回冒号后的值。
}
};
是不是没看懂,还是看网上的教学视频吧,持续更新