zoukankan      html  css  js  c++  java
  • 剑指offer:平衡二叉树

    题目描述:

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

    思路分析:

    首先要明确平衡二叉树的定义。平衡二叉是左右子树的高度差小于等于1,且左右子树都为平衡二叉树。这里就存在一个递归判断左右子树是否为平衡二叉树的操作。可以根据之前求二叉树的高度问题来求解,首先求得当前树的左右子树高度,若满足高度差小于等于1,再进一步判断左右子树。

    进一步优化以上的过程,考虑到每一次求二叉树树高度时,存在重复遍历树结点的问题。所以考虑将每个二叉树的高度存下来。

    代码:

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };*/
    10 class Solution {
    11 public:
    12     int deepTree(TreeNode* pRoot)
    13     {
    14         if(pRoot==nullptr)
    15             return 0;
    16         int count=0;
    17         if(pRoot->left==nullptr && pRoot->right==nullptr)
    18             return count+1;
    19         count++;
    20         return count+max(deepTree(pRoot->left), deepTree(pRoot->right));
    21     }
    22     bool IsBalanced_Solution(TreeNode* pRoot) {
    23         if(pRoot==nullptr)
    24             return true;
    25         int left = deepTree(pRoot->left);
    26         int right = deepTree(pRoot->right);
    27         if(left-right>1 || left-right<-1)
    28             return false;
    29         else
    30         {
    31             return (IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right));
    32         }
    33     }
    34 };

    优化代码:

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };*/
    10 class Solution {
    11 public:
    12     bool IsBalanced_Solution(TreeNode* pRoot) {
    13         int depth=0;
    14         return IsBalanced(pRoot,depth);
    15     }
    16      
    17     bool IsBalanced(TreeNode* pRoot,int& depth){
    18         if(pRoot==NULL){
    19             depth=0;
    20             return true;
    21         }
    22         int left,right,diff;
    23         if(IsBalanced(pRoot->left,left) && IsBalanced(pRoot->right,right)){
    24             diff=left-right;
    25             if(diff<=1 && diff>=-1){
    26                 depth=left>right?left+1:right+1;
    27                 return true;
    28             }
    29         }
    30         return false;
    31     }
    32 };
  • 相关阅读:
    three.js引擎基础知识—摄像机、场景及渲染器
    javaScript执行环境、作用域链与闭包
    zclip笔记:解决zclip失效问题
    jQuery笔记:checkbox
    jenkins笔记:手动更新插件
    Maven笔记:
    MyBatis笔记:invalid bound statement (not found)
    spring jpa data笔记
    springMVC笔记:@ResponseBody
    PDF笔记:内嵌字体
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/10960524.html
Copyright © 2011-2022 走看看