Balanced Binary Tree(Java)

来源:互联网 发布:淘宝关键词的大中小词 编辑:程序博客网 时间:2024/06/05 03:19

一、题意再现:

给定一个二叉树(注意,并未指定为二叉排序树,所以不可归并为平衡二叉树问题),判断是否平衡。

平衡:任意节点的左子树和右子树深度(高度)之差的绝对值不超过1。

二、算法1

1.思想:从上而下进行对于每个节点进行遍历,算出每个节点的左子树和右子树高度,这是一层递归。

      对于指定位于某个高度的节点来说,算出此节点所在的高度。

      注意:递归到哪一个节点,高度从这层开始,1开始增加。

2.代码:

public class Solution {    public boolean isBalanced(TreeNode root) {        if(root == null) return true;        int leftHeight = getHeight(root.left, 1);        int rightHeight= getHeight(root.right, 1);        if(Math.abs(leftHeight - rightHeight) > 1){            return false;        }else{            return isBalanced(root.left) && isBalanced(root.right);        }    }    public int getHeight(TreeNode tn, int height){        if(tn == null) return height;        return Math.max(getHeight(tn.left, height+1), getHeight(tn.right, height+1));     }}

三、算法2

1. 思想:从最底层叶子节点开始遍历,如果该节点满足平衡条件,则将其添加到HashMap表中。

2. 代码:

public class Solution {    HashMap<TreeNode, Integer> map = new HashMap<TreeNode, Integer>();    public boolean isBalanced(TreeNode root) {        if(root == null){            map.put(null, 0);            return true;        }        if(isBalanced(root.left) && isBalanced(root.right)){            if(Math.abs(map.get(root.left) - map.get(root.right)) > 1){                return false;            }else{                map.put(root, Math.max(map.get(root.left),map.get(root.right)) + 1);                return true;            }        }else{            return false;        }    }}


0 0
原创粉丝点击