判断一棵二叉树是不是平衡二叉树
二叉树中任意左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
两种解法。
第一种:菜鸟的解法,出现重复遍历,时间复杂度高。
1 bool IsBalanced(BinaryTreeNode* root) 2 { 3 if (root == NULL) 4 { 5 return true ; 6 } 7 int left = TreeDepth(root->m_pLeft);//该函数实现见我上一篇博客“数的深度” 8 int right = TreeDepth(root->m_pRight); 9 if ((left - right) > 1 || (left - right) < -1) 10 { 11 return false ; 12 } 13 else 14 return IsBalanced(root->m_pLeft) && IsBalanced(root->m_pRight); 15 }
第二种:大神的解法,只遍历一次,高端大气上档次。
1 bool IsBalanced2(BinaryTreeNode* root , int& Depth) 2 { 3 if (root == NULL) 4 { 5 Depth = 0 ; 6 return true ; 7 } 8 int left , right ; 9 if (IsBalanced2(root->m_pLeft, left) && IsBalanced2(root->m_pRight, right)) 10 { 11 int diff = left - right ; 12 if (diff <= 1 && diff >= -1) 13 { 14 Depth = 1 + (left > right ? left : right ); 15 return true ; 16 } 17 } 18 19 return false ; 20 21 } 22 bool IsBalanced2(BinaryTreeNode* root) 23 { 24 int Depth = 0 ; 25 return IsBalanced2(root , Depth); 26 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步