N39_判断该二叉树是否是平衡二叉树。

题目描述

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

package new_offer;
/**
 * 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
 * @author Sonya
 *思路:
 *1、借鉴上题 求树的深度。但是效率不高 需要重复遍历结点多次。
 *2、后续遍历,记录每个depth 只需要遍历一次。
 */
public class N39_IsBalanced_Solution {

	public boolean IsBalanced_Solution(TreeNode root) {
        if(root==null) return true;
        int left=TreeDepth(root.left);
        int right=TreeDepth(root.right);
        int val=left-right;
        if(Math.abs(val)>1)return false;
        return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right);
    }
	public int TreeDepth(TreeNode root) {
		if(root==null)return 0;
		int left=TreeDepth(root.left);
		int right=TreeDepth(root.right);
		if(left>right) return left+1;
		else return right+1;

    }
	public boolean IsBalanced_Solution2(TreeNode root) {
		int dep = 0;
        return IsBalanced(root, dep);	

	}
	public boolean IsBalanced(TreeNode root,int depth) {
		if(root==null) {depth=0;return true;}
		int left,right;
		left=right=0;
		if(IsBalanced(root.left,left)&&IsBalanced(root.right,right)) {
			int val=left-right;
	        if(Math.abs(val)>1)return false;
	        depth=(left>right?left:right)+1;
		}
		return false;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

  

原文地址:https://www.cnblogs.com/kexiblog/p/11175684.html

时间: 2024-11-08 23:44:42

N39_判断该二叉树是否是平衡二叉树。的相关文章

判断一个二叉树是否是平衡二叉树

题目:判断一个二叉排序树是否是平衡二叉树 思路:利用递归判断左右子树的深度是否相差1来判断是否是平衡二叉树. 1 #include<stdio.h> 2 #include "stdafx.h" 3 4 struct BinaryTreeNode 5 { 6 int m_nValue; 7 BinaryTreeNode* m_pLeft; 8 BinaryTreeNode* m_pRight; 9 }; 10 11 BinaryTreeNode* CreateBinaryTr

求一个二叉树的深度以及如何判断一个二叉树是一个平衡二叉树

/** * Created by Administrator on 2015/10/10. */public class TreeNode { //树节点的值 private char data; //节点的左子树 private TreeNode leftTree; //节点的右子树 private TreeNode rightTree; public TreeNode(char data,TreeNode leftTree,TreeNode rightTree){ this.data=dat

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

public boolean IsBalanced_Solution(TreeNode root) { return getDepth(root) != -1; } private int getDepth(TreeNode root) { if (root == null) return 0; int left = getDepth(root.left); if (left == -1) return -1; int right = getDepth(root.right); if (righ

剑指Offer--040-平衡二叉树(判断一棵二叉树是否是平衡二叉树)[扩展附加题]

链接 牛客OJ:平衡二叉树 九度OJ:未收录 GitHub代码: 040-平衡二叉树 CSDN题解:剑指Offer–040-平衡二叉树 牛客OJ 九度OJ CSDN题解 GitHub代码 040-平衡二叉树 未收录 剑指Offer–040-平衡二叉树 040-平衡二叉树 题意 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 递归法 根据平衡二叉树的定义 平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1 因此我们递归的判断每一个根节点,判断左右子树的高度差 递归得到二叉

编程实现判断一棵二叉树是否是平衡二叉树

Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1. 思路:遍历这棵二叉树,每访问

剑指Offer37 二叉树深度与平衡二叉树判断

1 /************************************************************************* 2 > File Name: 37_TreeDepth.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年09月03日 星期六 09时49分38秒 6 ***************************************

【算法】如何判断一个二叉树是平衡二叉树

题目:如何判断一个二叉树是平衡二叉树 定义: 平衡二叉树(AVL):1.空二叉树是AVL树: 2.如果T是一颗非空的二叉搜索树,TL和TR分别是其左子树和右子树,那么当T满足一下条件时,T是一颗AVL树:(1)TL和TR是AVL树:(2)|HL-HR|<=1,HL和HR分别是左子树和右子树的高度 示例: 算法思想: 采用递归的思想,从root节点进行递归的调用.假设叶子节点的高度是0,分别计算各个节点的左右子树的高度差:若高度差大于1则返回-1(表示不是平衡树)否则返回子树的最大高度加一. 时间

&quot;Coding Interview Guide&quot; -- 判断二叉树是否为平衡二叉树

[题目] 平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1.给定一棵二叉树的头节点head,判断这棵二叉树是否为平衡二叉树 [要求] 如果二叉树的节点数为N,要求时间复杂度为O(N) [分析] 平衡二叉树要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1.平衡二叉树的任一子树也是平衡二叉树,所以如果二叉树的某一节点的左右子树高度差的绝对值超过了1,则该二叉树必定不是平衡二叉树.所以在递归求树高的过程中,计算当前节点的左右子树高度差的绝对值是不是超

判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)

#include "stdio.h"#include "malloc.h"int count;typedef struct node{ char data; struct node *LChild; struct node *RChild;}BiTNode,*BiTree; void creatbitree(BiTree * bt) // 先序便历序列创建二叉树链表{ char ch=getchar(); if (ch=='#') {  *bt=NULL; } el