51.二叉树的深度 + 平衡二叉树

杀马特。学长 韩版系。学妹 提交于 2020-02-22 12:30:27

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

    int TreeDepth(TreeNode* pRoot)
    {
        if(!pRoot) return 0;
        return 1 + max(TreeDepth(pRoot->left) , TreeDepth(pRoot->right));
    }

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

低效率思路:调用上面的函数,使左右子树深度差不超过1,但是一个节点会被重复遍历多次

高效率思路:边遍历边观察是不是平衡,剪枝思想

int getDepth(TreeNode *pRoot){
	if(!pRoot) return 0;
	int left = getDepth(pRoot->left);
	if(left == -1)  return -1;
	int right = getDepth(pRoot->right);
	if(right == -1)  return -1;
	return abs(left - right) > 1 ? -1 : 1 + max(left, right);
}

bool IsBalanced_Solution(TreeNode* pRoot) {
	return getDepth(pRoot) != -1;
}

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!