67道数据结构题-剑指offer-二叉树

先补习一下二叉树的知识吧(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 ,问号前为判断条件,条件结果为真返回问号后面冒号前面的,假的就返回冒号后的值。 
    }
};

是不是没看懂,还是看网上的教学视频吧,持续更新

猜你喜欢

转载自blog.csdn.net/toomemetoo/article/details/108912238