Please likeeee, shareeee and subscribeeeeeeee :) Also follow me at Insta: Striver_79
@jaydeeppurohit13 жыл бұрын
thank's man for the free tutorials very helpful
@democratcobra3 жыл бұрын
Incredible mind.
@SatyamEdits2 жыл бұрын
Bhaiyaaa...."in Brief" mtlb "in short" hota hai......😅😅
@AmanAshutoshBCS Жыл бұрын
Sir, Timestamp 8 minute and 10 second. Sir, I am unable to understand in what case we will be getting -1 for lh and rh.???
@pulkitjain5159 Жыл бұрын
i think on 9:21 , it should be if( lh ==-1 || rh == -1) return -1 , beacuse if any of the subtree is unbalanced , my whole tree is unbalanced. if does'nt require to have my both subtree unbalanced.
@リンゴ酢-b8g2 жыл бұрын
A balanced binary tree, also referred to as a height-balanced binary tree, is defined as a binary tree in which the height of the left and right subtree of any node differ by not more than 1.
@shashwatpriyadarshy76813 жыл бұрын
Correction : Instead of && (AND) in the first if-condition of lh & rh, it should be || (OR) .
@joseph20733 жыл бұрын
@asishcodes2 жыл бұрын
When will lh or rh becomes -1? And how?
@100mehulsingh82 жыл бұрын
@@asishcodes Suppose, when we are calculating the max height of a subtree, it might not satisfy the balanced tree condition, so a height of -1 will be returned instead of the max height !!!
@maheshjindal26222 жыл бұрын
@@asishcodes it'll become when the difference condition(if(abs(rh - lh))) will be executed
@maheshjindal26222 жыл бұрын
he made a correction in the code!
@abhishekarora4373 жыл бұрын
Never thought that this question can be solved like this also....very easy code A big thank you to striver
@warriorgaming95092 жыл бұрын
So true man
@tanishqdadhich85892 жыл бұрын
The time complexity of the first approach will be, N Log N, because if the tree is imbalanced, it'll have an early termination. If the tree is skewed it would return False very fast, so worst case is actually when the tree is balanced !
@parthsalat2 жыл бұрын
💯💯💯
@only_for_fun1234r Жыл бұрын
I didn't understand why very fast , its has to travel the complete height of left skew which will be (N) because we are traversing from root
@beingSenpai Жыл бұрын
what if the N = 10^8 and node left contains 10^8 -1 nodes and another one node at right side then we go through all the nodes on left side at last termination we come to know that its right after the root node is imblanced then it would taken almost O(N)
@kennethantonyjohn27082 жыл бұрын
Thanks a lot for the explanation, it was very helpful. One further optimization that could be done is to check if lh and rh values right after each recursive call lh = check(node -> left) if lh == -1: return -1 rh = check(node -> right) if rh == -1: return -1 In this case we are not computing the right sub-tree if at all, at any point the left tree breaks the condition
@chiragvohra66732 жыл бұрын
how lh value will be -1 can u explain ?
@VV-ps8rt2 жыл бұрын
@@chiragvohra6673 if at any node in left subtree is not balanced, ultimately will result in unbalanced left subtree
@tamannasharma35243 ай бұрын
Really good explanation and the best part is converting the solution of calculating height to find if the tree is balanced is super..
@saicharangarapati2517 Жыл бұрын
Thank You Striver❣ By seeing 50% video I got the logic and I made it
@prakharmangal11523 жыл бұрын
Python Solution: class Solution: def isBalanced(self, root: Optional[TreeNode]) -> bool: def check(node): if node == None: return 0 lh = check(node.left) rh = check(node.right) if lh == -1 or rh == -1 or abs(lh-rh) > 1: return -1 return 1 + max(lh, rh) return check(root) != -1
@VV-ps8rt2 жыл бұрын
after calculating lh, you can immediately check if its -1 and return, will save lot of time especially if its right leaning tree
@adamyasharma_0135 Жыл бұрын
such a simple and easy to understand approach ,amazing
@SagarSrikantАй бұрын
Big Thank You to Striver. Leveraging the solution from previous video in this playlist. Below is the alternative approach:- /* Algorithm for the main function, isBalanced(root): - Declare and Initialize leftHeight to the return value of the helper function, getMaxDepth(root.left) - Declare and Initialize rightHeight to the return value of the helper function, getMaxDepth(root.right) - If the absolute difference between the leftHeight and rightHeight is greater than 1, return false. - If the left side of the subtree is NOT balanced OR right side of the subtree is NOT balanced, return false. - Return true. Complexity Analysis: - Time Complexity = O(N) - Space Complexity = O(N) Algorithm for the helper function, getMaxDepth(root): - Base case condition - If root is equal to null, return 0. - Main/Recursive case condition - If the root is not equal to null, then the maxDepth will be `1 + max(maxDepth(left of root), maxDepth(right of root)). Return the maxDepth. */ var isBalanced = function(root) { // Edge case if (root === null) { return true; } let leftHeight = getMaxDepth(root.left); //console.log(leftHeight); let rightHeight = getMaxDepth(root.right); //console.log(rightHeight); let diff = Math.abs(leftHeight - rightHeight); //console.log(diff); if (diff > 1) { return false; } if (!isBalanced(root.left) || !isBalanced(root.right)) { return false; } return true; }; var getMaxDepth = function(root) { // Base case condition if (root === null) { return 0; } // Recursive case condition return 1 + Math.max(getMaxDepth(root.left), getMaxDepth(root.right)); };
@PabitraPadhy3 жыл бұрын
If you follow the mycodeschool approach, where height of a null node is -1, then replace the exit condition from return 0 to return -1. also, replace all the -1 in the code to some flag value say, -2 or something in the negative side other than -1. you could also declare that flag as a static const inside the function. If this is done, then if it's balanced, you'll get directly the height of the node passed initially. Assuming, you're following height of a node, is the # of edges from from leaf to that node, in that branch.
@ruchivora11903 жыл бұрын
I struggled to understand the O(N^2) approach, but you made it so simple. Thank You!
@arishsheikh30002 жыл бұрын
Work on recursion more
@ayushkumar-wt2wm3 жыл бұрын
class Solution { public: bool res=true; int height_of_tree(TreeNode *root) { if(root==NULL) { return 0; } int left=height_of_tree(root->left); int right=height_of_tree(root->right); if(abs(left-right)>1) res=false; return max(left,right)+1; } bool isBalanced(TreeNode* root) { height_of_tree(root); return res; } };
@yashmundankar242 жыл бұрын
Did the same thing. class Solution { public: int func(TreeNode* root,bool &b){ if(root==NULL){ return 0; } int lh=func(root->left,b); int rh=func(root->right,b); if(abs(lh-rh)>1) b=false; return 1+max(rh,lh); } bool isBalanced(TreeNode* root) { if(root==NULL) return true; bool b=true; func(root,b); return b; } };
@ishangujarathi10 Жыл бұрын
AMazing intuition, understood completely through dry run
@utsavseth6573 Жыл бұрын
Me solving a question on my own by some magic once in a bluemoon. Le striver: So the naive approach is.....turns out to be my approach..... I am like ...damn, this guy.... 😂😂😂😂😂.
@stith_pragya Жыл бұрын
Thank You So Much for this wonderful video...............🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻
@kakadiazeel3 жыл бұрын
class Solution { boolean isBal=true; public boolean isBalanced(TreeNode root) { helper(root); return isBal; } public int helper(TreeNode root){ if(root==null) return 0; int left = helper(root.left); int right = helper(root.right); int gap = Math.abs(left-right); if(gap>1) isBal=false; int height = Math.max(left,right)+1; return height; } }
@CuriousAyushi4 ай бұрын
What an Explanation MANNN!!!!!!!!!!!!!!! 💫💯
@akashddeepchitransh4537Ай бұрын
Amazing explanation. You are an inspiration.
@engineervinay Жыл бұрын
i decided to solve this problem on my own first and after solving thought that i should see the optimized approach and when i started watching i realized my solution is exactly same as striver's this was my solution: int getheight(TreeNode* root){ if(root==NULL)return 0; int lh=getheight(root->left); int rh=getheight(root->right); if(lh==-1||rh==-1)return -1; if(abs(lh-rh)>1)return -1; return 1+max(lh,rh); } bool isBalanced(TreeNode* root) { if(getheight(root)==-1)return false; return true; } i don't know how i got this solution and first time so surprised that i got exact same solution as him i saw the previous problems solution so i knew we just have to make changes in that code.
@ritikshandilya70757 ай бұрын
Thankyou so much Striver ,you are the best
@vasudhajha91152 жыл бұрын
Another wonderful explanation + solution! Thank you for demystifying trees!
@bhavkushwaha8 ай бұрын
Thankyou Striver, Understood!
@viditsrivastava17474 ай бұрын
Out of the box solution!🤯
@sankalpjain48413 жыл бұрын
It should also find the right height of node 1 right? We need to visit the right subtree of node 1 also right? At 11.46 we returned -1 directly after we got lh==-1 before we got the rh.
@anujaditya023 жыл бұрын
As said by striver, even if we encounter -1 on the left side we are gonna return -1 as we are explicitly specifying that if left return -1 then the whole function return -1.
@_nucleus2 жыл бұрын
Yes I am also confused for the same, if(lh == -1 || rh == -1) return -1; This above statement can only run after, rh = check(node->right); And since in function call we will pass the root, how rh = check(node->right); this can be skipped, it will check for right child of root but both the codes on 12:00 is right because there he is checking before making call to right
@rishabhnegi98062 жыл бұрын
@@_nucleus yeah u are right ... even if we have lh as -1, the recursion will still chk for right tree as before calling for root->right we aren't checking whether we got any -1 till this point ... so in my opinion we can just chk if( lh==-1 ) before calling for rh .
@prakhar_pratyush2 жыл бұрын
@@rishabhnegi9806 yes I submitted both the approaches on leetcode. Putting lh==-1 before calling for rh, reduces the runtime by half.
@CodePinaka2 жыл бұрын
was looking for the same doubt in the comment section.... thanks vro
@AmanYadav-jf1yy Жыл бұрын
Using Ninja technique 😍😅😅 take an extra variable ans, initially set ans=true and pass this variable to the btHeight(fxn to calculate height of binary tree) function by reference. If in function btHeight, abs(lh-rh)>1 is true then set ans=false. bool isBalanced(TreeNode* root) { if(root==nullptr) return true; bool ans=true; btHeight(root,ans); return ans; } int btHeight(TreeNode* root, bool &ans) { if(root==nullptr) return 0; int lh=btHeight(root->left, ans); int rh=(root->right, ans); if(abs(lh-rh)>1) ans=false; return 1+max(lh,rh); }
@pulkitjain5159 Жыл бұрын
yup , i did it too , but your code is still doing extra calculations ,just do a return when left or right has a false and at end you will find that your logic and striver's logic are same
@udayptp Жыл бұрын
Noice
@subhajitdey1354 ай бұрын
We can use the brute force code with memoization also : unordered_map st; int height(TreeNode* node) { if (!node) return 0; if(st.find(node)!=st.end()) return st[node]; int l = height(node->left); int r = height(node->right); return st[node]=1 + max(l, r); } bool isBalanced(TreeNode* root) { if (!root) return true; int l=height(root->left); int r=height(root->right); if (abs(l - r) > 1) return false; bool check1 = isBalanced(root->left); bool check2 = isBalanced(root->right); if (!check1 || !check2) return false; return true; }
@muktarsayeed9198 Жыл бұрын
Good explanation. Walking through the diagram with the code is particularly useful 👍👍👍
@apmotivationakashparmar7222 ай бұрын
Thank you So much Striver !
@PrashantSingh-qr3vn10 ай бұрын
I have a doubt why a person of your caliber is working for some MNC when he can easily build some million dollar business since you are the person who can get things done
@DrOnZeR20225 ай бұрын
Striver does not want to sell paid courser he wants to help students in this way and I think striver loves his profession that's why he is not building his bussines
@mysterious57294 ай бұрын
@@DrOnZeR2022 surprise! Course launched ✨
@DrOnZeR20224 ай бұрын
@@mysterious5729 🤣🤣 this thing he said 2 year before in a vedio
@lifehustlers164 Жыл бұрын
Completed 16/54 (29% done) !!!
@nagame859 Жыл бұрын
Understood! By the way... the comments section of your videos is quite good👍. Want to say this since a very long time..
@uRamPlus3 жыл бұрын
this channel is a hidden gem 💎! thank you
@rohandevaki43492 жыл бұрын
at 1:23 , it is abs( height(left) - height(right))
@omkumar4211 Жыл бұрын
Yaa that's correct, that's the required condition for a balanced 🌲
@himanshugupta70102 жыл бұрын
Thanks Striver for such an amazing explanation . never ever thought this question like this . you completely changed my thought process. 🙌
@yashpaunikar6719 ай бұрын
loved it...!!!🤩🤩
@deepakjain4481 Жыл бұрын
maybe someday i will be called as a genius despite of my horrible failures i will try i will keep going someday i will compete with my dream
@TheWierdVibe2 жыл бұрын
Everything becomes easy when it's striver!
@ganeshjaggineni40975 ай бұрын
NICE SUPER EXCELLENT MOTIVATED
@noob_coder40175 ай бұрын
Tq striver❤for this wonderful playlist
@krishnakanttiwari517Күн бұрын
Thank you so much sir!
@codeman38289 ай бұрын
Great eexplanation
@firebout767511 ай бұрын
bit manipulation playlist pls....thanks for this wonderful video
@itzmartin20 Жыл бұрын
love your dedication! understood sir!
@adebisisheriff15911 ай бұрын
Thanks alot Striver!!!
@shameemahamad2617 Жыл бұрын
Very nice series to under all types of scenarios what can come across from binary tree.
@ajaykushwaha61373 жыл бұрын
Hey Buddy, thanks for such an awesome Video, but can u give an example of when the case will be lh==-1 or rh==-1? I couldn't understand.
@HimanshuSingh-zu4ht3 жыл бұрын
just happen in the same video example brother lh become -1 after if(abs(lh-rh)>1) return -1 now again when come to the check fuction here lh =-1 and if(lh==-1or rh==-1) return -1 and then we come out of check function with -1
@amanbhadani88402 жыл бұрын
Just do the dry run once on copy,u will understand better.
@devanshrai8972 Жыл бұрын
my approach:: int recur(TreeNode* root, int* ans) { if(root==NULL) return 0; int l = recur(root->left,ans); int r = recur(root->right,ans); if(abs(l-r)>1) *ans=0; return max(l,r)+1; } bool isBalanced(TreeNode* root) { int ans = 1; recur(root,&ans); if(ans==0) return false; else return true; }
@rohandevaki43492 жыл бұрын
at 4:47 , why did you multiply the time complexities of left and right? why dont we add them?
@nawabkhan49163 жыл бұрын
great work, and have lots of sponsor ad so that you can provide great videos.
@gangsta_coder_123 жыл бұрын
Excellent explanation as always 🔥🔥🔥🔥👌👌👌👌
@annaswaheed26152 жыл бұрын
best explanation so far 💯!!!
@cinime2 жыл бұрын
Understood! Such a smart explanation as always, thank you very much!!
@Anand-zg6jv2 жыл бұрын
thanxx . i was stuck at this question for last two days ...♥
@subramanir84386 ай бұрын
10:18 here why is it fine if lh-rh is equal to 1. Still it's an unbalanced tree right. Wondering why greater than 1 is taken instead of greater than or equal to 1
@deepanshurohilla2114 Жыл бұрын
Bhaiya at 11:02 I don't think so that -1 will be returned earlier before visiting the right portion. right recursive calls will be done before returning -1 as answer Please correct em if i am wrong
@deepanshurohilla2114 Жыл бұрын
sorry my bad i wrote this comment only based on the pseudo code at 11:15 its fine now 😂😂😂😂
@shivam4you7443 жыл бұрын
I understood the code and entire explanation : ) 🔥🔥🔥🔥👌👌👌👌
@tushar5359 Жыл бұрын
Thanks Striver!, I learnt a lot from you!
@niranjanraje71603 жыл бұрын
In the first approach, we keep checking for each and every node if its left subtree and right subtree height
@rajkrishnan99613 жыл бұрын
yes
@akashverma57565 ай бұрын
I call this method of solving Recursion Exploitation. We design recursion for different purpose but exploit every recursive call separately to find our answer.
@theankurpathak2 жыл бұрын
I didn't get o n square solution. Once u have checked difference of left and right child for root, why are u repeating it for subtrees. Is it possible that tree is balanced but subtrees are not balanced.
@yashmundankar242 жыл бұрын
If a subtree is unbalanced then it will ultimately lead to making the whole tree unbalanced.
@abhishekverma3323 жыл бұрын
Actually, while submitting on Leetcode the latter solution (approach 2) is faster than 64.02% of C++ online submissions although being O(n) whereas the earlier is faster than 90.42% of C++ submission though it being O(n^2). I am actually not getting this, or I am missing anything. Kindly help!
@parthapratimghose1733 жыл бұрын
i submitted by myself something si,miliar to the 2nd i got 99% best 4ms solution some extra recursion you have used ?
@Usurperhk3 жыл бұрын
Leetcode's runtime is a scam. Focus on the time complexity of code you write.
@KrishnaSharma-bv5ys2 жыл бұрын
Please show the code of 1st approach
@matrixtoogood56012 жыл бұрын
Leetcode test cases might not be of very big trees with billions of nodes. In smaller examples, time complexity will not explain the running/execution time accurately since asymptotic analysis assumes almost infinitely large sizes. For smaller test cases, execution time will depend on network latency, CPU thread switching etc. which is pretty non-deterministic
@tanishqdadhich85892 жыл бұрын
@@matrixtoogood5601 Sounds like avalid point!
@Nikita-hv5jm2 жыл бұрын
thaks a lot for such a great explanation !!
@KeepCalm__ Жыл бұрын
@10:26 correction: height of the tree is 1when stand at 3
@Aditya-wy4ci2 ай бұрын
But for node 1,recursive call will be made for right subtree and then it will return -1
IN find height function base condition should return -1 . otherwise function will return height + 1 .
@rhl_2 жыл бұрын
There exist variety of definiton of height and depth of a tree. Some count nodes while some count egdes depends on the problemsetter. In this case it was mentioned in the question what height here is meant. good day :)
@jasonbrody46183 жыл бұрын
Liked. Cfbr will watch after some time
@stith_pragya Жыл бұрын
Ye dekh k bohot acha lgta h jb you come on to some video of a pro coder to check for a better solution than yours and you find it exactly the same..........🙂
@dakshchandore64354 ай бұрын
how can the height be -1 since the height can either be zero or >zero and i didn't understand this line if(leftHieght == -1 ) return -1 and if (rightHeight == -1 ) return -1 ;
@animeshsrivastava99383 жыл бұрын
class Solution { public boolean isBalanced(TreeNode root) { return height(root) != -1; } int height (TreeNode root) { if (root == null) return 0; int leftH = height(root.left), rightH = height(root.right); if ((rightH == -1) || ((leftH == -1)) || (Math.abs(leftH - rightH) > 1)) return -1; else return Math.max(leftH, rightH) + 1; } }
@gigglezone3432 Жыл бұрын
Can we instead have a global variable, flag and if at any moment left-right subtree height not
@studyonly96225 ай бұрын
I think you missed the root->right tree steps. or put that condition right after lh=check(node->left)
@KartikeyTT5 ай бұрын
tysm sir
@sauravchandra10 Жыл бұрын
Mazedaar approach
@adityapandey233 ай бұрын
Understood
@saikirank6357 Жыл бұрын
In what case either left height or right height is equal to -1?
@omkumar4211 Жыл бұрын
Same qn
@taqimustafa76659 ай бұрын
when either of the subtree would be unbalanced,the previous function call would have returned -1 to them,so if unbalancing is found,we dont need to check further
@eshanchourasia2873 жыл бұрын
Bhaiya ek Sara imp algorithm ka bhi video bna dona pls .aapka hi smgh aata hai adat lk gya hai😁
@stark2461 Жыл бұрын
This code won't work when tree is left skewed or right skewed. change return 0 to -1 when root == NULL and change others as -2
@tanveer.shaikh2 жыл бұрын
instead of using we can use boolean array like you did in diameter
@rahulsbhatt Жыл бұрын
Such an excellent video! Thanks, Striver Bhai!
@subhajitdey1354 ай бұрын
How is the time complexity of the brute force solution O(n*n) and not O(2*n). Dont the recursion calls of the findH finishes first and then for the function check() starts ? I know that this recursion has overlapping sub problems. But why is the time complexity O(n*n) for the overall brute force
@Sakthivel-zq1hb3 ай бұрын
I have a doubt Striver Sir, [1,2,3,4,5,6,null,8] -- this is balanced based on the formula ((lh - rh)
@utkarsh_1082 жыл бұрын
IDK why but your brute force approach is giving WA for other TCs on Leetcode
@harshkumargupta8538 Жыл бұрын
why the recursion stopped the moment when the left call of 1 node gave -1 the right call must be executed n for 1 node...
@thegamegoing43205 ай бұрын
Same doubt
@harshkumargupta85383 ай бұрын
@@thegamegoing4320 we can put a check after calculating lh that if it is -1 then return -1.
@nuraynasirzade Жыл бұрын
good !
@codding32world502 жыл бұрын
Thank You Striver:)))))))))))))))))))))))))))))))
@Shivi325905 ай бұрын
thank you
@depressedguy35663 жыл бұрын
it's awesome that you are not uploading all videos in a bulk, in a staggered manner we can complete the course according to your uploads, btw great content
@manavshah74503 жыл бұрын
I disagree with you... He was buzy making the Tree series and didn't upload for a month and now we expected to get the whole series but he is uploading slowly. Placements are going on and it would be beneficial for final year students if he uploads the whole series together.
@depressedguy35663 жыл бұрын
@@manavshah7450 it's okay to disagree and I respect your opinion, but I personally find it more helpful than bulk upload, it's just a personal POV
@manavshah74503 жыл бұрын
@@depressedguy3566 alright. Technically speaking it shouldn't matter to you even if the whole series gets uploaded together. After all you can watch it at your own convenience and pace at youtube.
@AnkitKumar-jm3cz2 жыл бұрын
loved your optimised approach bhaiya
@akashjha70903 жыл бұрын
are bhaiya we are checking condition lh==-1 and another one rh==-1 i am confused when lh and rh may be -1
@codingwithanonymous8903 жыл бұрын
same dude
@sourabhchoudhary72893 жыл бұрын
I have completed tree but gonna watch again 🤘
@fuehrercheem3 жыл бұрын
No one asked
@sourabhchoudhary72893 жыл бұрын
@@fuehrercheem you could have simply ignored this comment but no toxicity is necessary...
@fuehrercheem3 жыл бұрын
@@sourabhchoudhary7289 mentioning and then saying u can ignore this wtf
@sourabhchoudhary72893 жыл бұрын
@@fuehrercheem by that comment I meant that I love his content so gonna watch again It was not commented because someone asked or not
@democratcobra3 жыл бұрын
film hein keya??
@surbhiranjan78083 жыл бұрын
When does this condition occur? if (rightHeight == -1) return -1; if (leftHeight == -1) return -1;
@praveenrajs943 жыл бұрын
the line lh = check(root->left) means that check whether the left subtree is balanced or not, and if that function returns -1 (which is stored in the lh variable), it means that the left subtree is not balanced. same is the condition with right subtree, if either of them turn out to be unbalanced then the entire tree is unbalanced.
@lakshsinghania Жыл бұрын
@@praveenrajs94 thnks for the explanation! i was looking for the same only
@piyushverma82073 жыл бұрын
Can someone tell me why this code doesn't work? On my local machine it gives the right output but on leetcode it fails. int ans=0; int diff(TreeNode* root){ if(root==NULL){ ans = max(ans,0); return 0; } int left = diff(root->left); int right = diff(root->right); int height = 1 + max(left,right); ans = max(ans, abs(right-left)); return height; } class Solution { public: bool isBalanced(TreeNode* root) { if(root==NULL) return true; int height = diff(root); if(ans>1) return false; return true; } };
@ankitpradhan24992 ай бұрын
i cant figure out how to write the leftH and rightH functions in the brute force...
@ayushmishra12072 жыл бұрын
Bhaiya In which case the height of left or right side will -1 ??
@pranavmendiratta3166 Жыл бұрын
Amazing series, keep going!
@rishabhkesarwani57613 жыл бұрын
One more Solution using the pair that contains both height and isBalance . T.C. -> O(N) class Solution { class pair{ int height; boolean isbal; pair(int height,boolean isbal){ this.height=height; this.isbal=isbal; } pair(){}; } public boolean isBalanced(TreeNode root) { pair ans = isBalanceHelper(root); return ans.isbal; } public pair isBalanceHelper(TreeNode root){ if(root==null){ pair ans=new pair(0,true); return ans; } pair left=isBalanceHelper(root.left); pair right=isBalanceHelper(root.right); pair ans=new pair(); ans.height=1+Math.max(left.height,right.height); ans.isbal=true; if(!left.isbal||!right.isbal){ ans.isbal=false; } if(Math.abs(left.height-right.height)>1){ ans.isbal=false; } return ans; } }