刷题---二叉树--2

🌵平衡二叉树

在这里插入图片描述
解题思路:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。题目中已经给出我们提示,我们需要先求出左子树的高度,在求出右子树的高度,然后看他们的高度差。

int getHeight(TreeNode root){
   
           if(root==null){
   
               return 0;
           }
           int lightLeft=getHeight(root.left);
           int lightRight=getHeight(root.right);
           return lightLeft>lightRight?lightLeft+1:lightRight+1;
        }
        public boolean isBalanced(TreeNode root) {
   
            if(root==null){
   
                return true;
            }
            int left=getHeight(root.left);
            int right=getHeight(root.right);
            if(Math.abs(left-right)<=1&&isBalanced(root.left)&&isBalanced(root.right)){
   
                return true;
            }
            return false;
        }

还有一种方法我们可以在求高度的函数里面判断左右两个子树的高度差的绝对值是否超过 1,如果超过1就返回一个负数,这样如果最后结果返回一个负数,那么这个树就不是平衡二叉树。

private int getHeight1(TreeNode root){
   
            if(root==null){
   
                return 0;
            }
            int lightLeft=getHeight(root.left);
            int lightRight=getHeight(root.right);
            if(lightLeft>=0 && lightRight>=0 && Math.abs(lightLeft- lightRight)<=1){
   
                return Math.max(lightLeft,lightRight)+1;
            }else{
   
                return -1;
            }
        }
        public boolean isBalanced1(TreeNode root) {
   
            if(root==null){
   
                return true;
            }
            return getHeight1(root)>=0;
        }

🌵对称二叉树

在这里插入图片描述解题思路:
在这里插入图片描述

 public boolean isSymmetricChild(TreeNode rightTree,TreeNode leftTree){
   
        if(leftTree==null && rightTree!=null)  return false;
        if(leftTree!=null && rightTree==null)  return false;
        if(leftTree==null && rightTree==null)   return true;
        if(rightTree.val!=leftTree.val){
   
            return false;
        }
        return isSymmetricChild(leftTree.left,rightTree.right)&&
               isSymmetricChild(leftTree.right,rightTree.left);
    }
    public boolean isSymmetric(TreeNode root) {
   
        if(root==null)  return true;
        return isSymmetricChild(root.left,root.right);
    }

🌵二叉树遍历

在这里插入图片描述解题思路:题目给定的是前序遍历的结果,那么我们构建这棵二叉树的时候,也是要用前序遍历的方式来进行构建。

在这里插入图片描述

import java.util.*;
class TreeNode{
   
  public char val;
  public TreeNode left;
  public TreeNode right;
  public TreeNode(char val){
   
  this.val=val;
  }
}
public class Main{
   
       public static int i = 0 ;
       public static TreeNode createTree(String str) {
   
       TreeNode root = null;
        if(str.charAt(i) != '#') {
   
            root = new TreeNode(str.charAt(i));
            i++
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值