递归法
后序遍历 求的是高度
递归法 确定函数的参数和返回值 参数传入树的根节点 返回这个树的深度。
确定终止条件 如果为空节点的话,返回0 表示高度为0
确定单层递归的逻辑
先求它的左子树的深度 再求右子树的深度,最后取左右深度最大的数值+1
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
// 使用递归的方法 后序遍历
// 1 确定递归函数的参数和返回值
const getdepth = function(node){
// 确定终止条件
if(node===null)return 0;
// 确定单层逻辑
let leftdepth = getdepth(node.left)
let rightdepth = getdepth(node.right)
let depth = 1+Math.max(leftdepth,rightdepth)
return depth
}
return getdepth(root)
};
二叉树的最小深度
和最大深度有区别
最小深度是从根节点到最近叶子节点的最短路径上的节点数量,
叶子节点 左右孩子都为空
要判断有没有左右子树
要注意 没有左孩子的分支不能算最短深度。
求二叉树的最小深度和最大的差别主要在于处理左右孩子不为空的逻辑
问题
因为单词拼写错误 卡了1h
代码出错要判断 是那个地方出了问题,去思考自己写的逻辑有没有什么问题
要根据输入的例子去判断哪里有问题,为什么不对,不要只是单纯的改代码 照着正确的。
要去想为什么对不上,去思考可能在那一块出了问题,不要一直从头到尾排查,没问题的地方就不用排查了。
完全二叉树的节点个数
先求它的左子树的数量,再求右子树的节点数量,最后取总和再加1