剑指offer55:二叉树的深度
题目一:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度
思路:求树的深度使用递归,最长路径为左子树的最长路径和右子树的最长路径中的最大值加上当前节点.
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==nullptr)
return 0;
return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1;
}
题目二:输入一棵二叉树,判断该二叉树是否是平衡二叉树
平衡二叉树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树. 自底向上判断,当任意节点左右子树均为平衡二叉树时,该🌲为平衡二叉树,当有一节点不满足时,停止判断.
int depth(TreeNode* node){
if(node==nullptr)
return 0;
int left=depth(node->left);
if(left==-1)
return -1;
int right=depth(node->right);
if(right==-1)
return -1;
return abs(left-right)>1? -1: max(left,right)+1;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==nullptr)
return true;
return depth(pRoot)!=-1;
}