zoukankan      html  css  js  c++  java
  • 平衡二叉树

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

    这道题比较考验思维。平衡二叉树的条件是左、右子树的深度差不大于1,所以我们首先需要计算出二叉树的深度。而这道题需要返回的并不是深度,而是一个布尔值,因此我们初始认为这棵树是平衡的,在计算深度的过程中,如果发现左、右子树的深度大于1了,就将答案置为false。

    计算深度我们应该另开一个函数进行递归操作,一棵树的深度是它的左子树和右子树这两者中最大的子树深度+1。递归计算左子树的深度和右子树的深度,返回的是整棵树的深度,在计算左、右子树深度的过程中,如果发现深度差大于1,就将答案置为false。

    c++代码如下:

     1 class Solution {
     2 public:
     3     bool ans = true;
     4     bool IsBalanced_Solution(TreeNode* pRoot) {
     5         dfs(pRoot);
     6         return ans;
     7     }
     8     
     9     int dfs(TreeNode* pRoot){
    10         if(!pRoot) return 0;
    11         int left = dfs(pRoot->left);
    12         int right = dfs(pRoot->right);
    13         if(abs(left - right) > 1) ans = false;
    14         return max(left, right) + 1;
    15     }
    16 };
  • 相关阅读:
    偶遇问题
    上机实践
    知识点摸清
    实用脚本
    实用脚本
    对于问题,要打破砂锅问到底,也要懂得不求甚解——不执着于问题本身
    偶遇问题
    知识点摸清
    偶遇问题
    程序员论坛
  • 原文地址:https://www.cnblogs.com/hellosnow/p/12082932.html
Copyright © 2011-2022 走看看