zoukankan      html  css  js  c++  java
  • LeetCode: Balanced Binary Tree

    C++

     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int dfs(TreeNode *root, bool &flag, int cur) {
    13         if (!root || !flag) return cur;
    14         int leftH = dfs(root->left, flag, cur+1);
    15         if (!flag) return cur;
    16         int rightH = dfs(root->right, flag, cur+1);
    17         if (abs(leftH-rightH) <= 1 && flag) flag = true;
    18         else flag = false;
    19         return max(leftH, rightH);
    20     }
    21     bool isBalanced(TreeNode *root) {
    22         // Start typing your C/C++ solution below
    23         // DO NOT write int main() function
    24         if (!root) return true;
    25         bool flag = true;
    26         if (abs(dfs(root->left, flag, 0)-dfs(root->right, flag, 0)) <= 1 && flag) return true;
    27         else return false;
    28     }
    29 };

    Java: Time complexity: O(N), Space complexity: O(LOGN)

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public boolean isBalanced(TreeNode root) {
    12         return checkHeight(root) != -1;
    13     }
    14     private int checkHeight(TreeNode root)
    15     {
    16         if (root == null)
    17         {
    18             return 0;
    19         }
    20         int leftHeight = checkHeight(root.left);
    21         if (leftHeight == -1)
    22         {
    23             return -1;
    24         }
    25         int rightHeight = checkHeight(root.right);
    26         if (rightHeight == -1)
    27         {
    28             return -1;
    29         }
    30         int heightDiff = Math.abs(leftHeight - rightHeight);
    31         if (heightDiff > 1)
    32         {
    33             return -1;
    34         }
    35         else
    36         {
    37             return Math.max(leftHeight, rightHeight) + 1;
    38         }
    39     }
    40 }
  • 相关阅读:
    C# AtomicInt
    Ubuntu16.04或18.04上安装QQ微信迅雷
    Git强制拉取覆盖本地 Pull force
    ulimit限制打开的文件数量
    centos 7.x设置守护进程的文件数量限制
    Apache Doris通过supervisor进行进程管理
    CentOS7 安装supervisor守护进程管理器
    fdisk 分区
    linux i2c tools
    ubuntu12.04 登录黑屏
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/2964768.html
Copyright © 2011-2022 走看看