剑指offer系列43---判断平衡二叉树
Posted noaman_wgs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列43---判断平衡二叉树相关的知识,希望对你有一定的参考价值。
【题目】判断一颗二叉树是不是平衡二叉树。
* 平衡二叉树定义:任意子节点深度相差不超过1.
【思路】由上题,利用递归得到二叉树每个结点的深度同时比较。
1 package com.exe9.offer; 2 3 import com.exe9.offer.BTreeDepth.TreeNode; 4 5 /** 6 * 【题目】判断一颗二叉树是不是平衡二叉树。 7 * 平衡二叉树定义:任意子节点深度相差不超过1. 8 * 【思路】由上题,利用递归得到二叉树每个结点的深度同时比较。 9 * @author WGS 10 * 11 */ 12 public class IsAVL { 13 14 static class TreeNode{ 15 int val; 16 TreeNode left=null; 17 TreeNode right=null; 18 public TreeNode(int val){ 19 this.val=val; 20 } 21 } 22 //得到树的深度 23 public int getBTreeDepth(TreeNode pRoot){ 24 if(pRoot==null) return 0; 25 //每当proot==null时,就比较left与right大小,加1 26 int left=getBTreeDepth(pRoot.left); 27 int right=getBTreeDepth(pRoot.right); 28 //System.out.println(left+"===="+right); 29 return (left>right)?left+1:right+1; 30 31 } 32 public boolean isAVL(TreeNode pRoot){ 33 if(pRoot==null) return true; 34 int left=getBTreeDepth(pRoot.left); 35 int right=getBTreeDepth(pRoot.right); 36 int val=left-right; 37 if(val>1 || val<-1) 38 return false; 39 40 return isAVL(pRoot.left) && isAVL(pRoot.right); 41 } 42 public static void main(String[] args) { 43 TreeNode root = new TreeNode(1); 44 TreeNode node1 = new TreeNode(2); 45 TreeNode node2 = new TreeNode(3); 46 TreeNode node3 = new TreeNode(4); 47 TreeNode node4 = new TreeNode(5); 48 TreeNode node5 = new TreeNode(6); 49 TreeNode node6 = new TreeNode(7); 50 51 root.left = node1; 52 root.right = node2; 53 node1.left = node3; 54 node1.right = node4; 55 node2.right = node5; 56 node4.left = node6; 57 58 boolean b=new IsAVL().isAVL(root); 59 System.out.println(b); 60 61 } 62 63 }
以上是关于剑指offer系列43---判断平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章