检查二叉树是否平衡

实现一个函数,检查二叉树是否平衡。在这个问题中。平衡树的定义例如以下:随意一个结点。其两棵子树的高度差不超过1.

直接递归訪问整棵树,计算每一个结点两棵子树的高度。

public static int getHeight(TreeNode root)

{

if(root == null) return 0;//终止条件

return Math.max(getHeight(root.left), getHeight(root.right))+1;

}

public static boolean isBalanced(TreeNode root)

{

if(root == null) return true;//终止条件

int heightDiff=getHeight(root.left)-getHeight(root.right);

if(Math.abs(heightDiff)>1)

return false;

else//递归

{

return isBalanced(root.left) && isBalanced(root.right);

}

}

public static int checkHeight(TreeNode root )

{

if(root == null)

{

return 0;//高度为0

}

//检查左子树是否平衡

int leftHeight=checkHeight(root.left);

if(leftHeight==-1)

{

return -1;

}

//检查右子树是否平衡

int rightHeight=checkHeight(root.right);

if(rightHeight == -1)

{

return -1;

}

/*检查当前结点是否平衡*/

int heightDiff=leftHeight-rightHeight;

if(Math.abs(heightDiff)>1)

return -1;

else

{

//返回高度

return Math.max(leftHeight, rightHeight)+1;

}

}

public static boolean isBalanced(TreeNode root)

{

if(checkHeight(root)== -1)

{

return false;

}

else

{

return true;

}

}

这段代码须要O(N)的时间和O(H)的空间,H是树的高度。

时间: 2024-11-09 08:53:54

检查二叉树是否平衡的相关文章

判断二叉树是否平衡

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 注:这里不考虑该二叉树是否是二叉排序树 解决要点: 1.后序遍历二叉树: 2.递归. 核心算法: bool isBalanced(pTree pT,int *depth) { if(!pT)//参数判断 { *depth = 0; return true; } //后序遍历 int left,right; if(isBalanced(pT->lChild,&

判断一个二叉树是否平衡

判断二叉树是否平衡的方法是求左右儿子的深度相差是否大于1,大于则这个二叉树不平衡. class Solution { public: int height(TreeNode *root) {//求节点的高度 if(root == NULL)return 0; return max(height(root->left), height(root->right)) + 1; } bool isBalanced(TreeNode* root) { if(root == NULL)return tru

二叉树的深度 判断二叉树是否平衡 38

? ? 问题一 ? ? 引言 ? ? 在之前我们讲到过如果保存树根节点到叶子节点之间的路径,其中包含了如何判断一个节点是否是叶子节点,而且用栈保存了路径中的节点,只要遍历一下栈即可,然后用一个深度保存所有遍历深度中的最大值 ? ? 但仔细想想,这种方法是否过于繁琐,我们其实不需要一个完整的路径,为什么要去用一个栈保留路径呢,我们仅仅需要的是深度而已,所以我们可以从深度的角度出发去思考问题 ? ? 分析问题 ? ? 考虑递归,一棵树的深度一定是左子树和右子树深度较大值加1 ? ? 左子树如果是空,

推断二叉树是否平衡

题目:输入一棵二叉树的根结点,推断该树是不是平衡二叉树.假设某二叉树中随意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 注:这里不考虑该二叉树是否是二叉排序树 解决要点: 1.后序遍历二叉树: 2.递归. 核心算法: bool isBalanced(pTree pT,int *depth) { if(!pT)//參数推断 { *depth = 0; return true; } //后序遍历 int left,right; if(isBalanced(pT->lChild,&

【记录】2015/216数据结构大型实验 模拟登陆用户系统 二叉树的平衡 C++ MFC

含源代码及实验报告 http://pan.baidu.com/s/1boydZe3 MFC的使用.控件的继承.消息的重载

二叉树平衡检查

实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1.给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡. import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }*

12.二叉树平衡检查

题目描述 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1. 给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡. 思想:分治法(手段) 递归(处理方法) 代码如下: import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode

careercup-树与图 4.1

4.1 实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个结点,其两颗子树的高度差不超过1. C++实现代码: #include<iostream> #include<new> #include<cmath> using namespace std; //Definition for binary tree struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(i

程序员面试金典算法题

空格替换 题目描述 请编写一个方法,将字符串中的空格全部替换为"%20".假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成. 给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string. 测试样例: "Mr John Smith",13 返回:"Mr%20John%20Smith" "Hello World&qu