博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode 110_二叉树_遍历】Balanced Binary Tree
阅读量:6256 次
发布时间:2019-06-22

本文共 1239 字,大约阅读时间需要 4 分钟。

解法一:From top to bottom

1 int treeHeight(TreeNode *T) 2 { 3     if (T == NULL) 4         return 0; 5      6     return max(treeHeight(T->left), treeHeight(T->right)) + 1; 7 } 8  9 bool isBalanced(TreeNode* root)10 {11     if (root == NULL)12         return true;13 14     int left_height = treeHeight(root->left);15     int right_height = treeHeight(root->right);16     if (abs(left_height - right_height) > 1)17         return false;18 19     if (!isBalanced(root->left) || !isBalanced(root->right))20         return false;21 22     return true;23 }

解法一递归判断子树是否为平衡二叉树的过程中,重复计算了多次子树的高度,时间复杂度大于O(N)。解法二将这个计算过程优化了,时间复杂度为O(N)。

解法二:From bottom to top

1 int dfsTreeHeight(TreeNode *T) 2 { 3     if (T == NULL) 4         return 0; 5  6     int left_height = dfsTreeHeight(T->left); 7     if (left_height == -1) 8         return -1; 9     int right_height = dfsTreeHeight(T->right);10     if (right_height == -1)11         return -1;12     if (abs(left_height - right_height) > 1)13         return -1;14 15     return max(left_height, right_height) + 1;16 }17 18 bool isBalanced(TreeNode* root)19 {20     if (root == NULL)21         return true;22 23     return dfsTreeHeight(root) != -1;24 }

 

转载于:https://www.cnblogs.com/mengwang024/p/4622603.html

你可能感兴趣的文章
nginx 重启命令
查看>>
一花一世界 一叶一菩提
查看>>
Python练习(day7)
查看>>
网络工程师笔试题总结
查看>>
我的友情链接
查看>>
C# DataTable的詳細用法
查看>>
vSphere网络原理及vSwitch
查看>>
df 命令
查看>>
jQuery 简介
查看>>
红帽新RHEL 7.1企业版发布
查看>>
Linux中的帮助功能
查看>>
Linux学习笔记——程序包管理之yum
查看>>
SqlServer转换为Mysql的一款工具推荐(mss2sql)
查看>>
go装饰模式,一个屌丝撸管的故事
查看>>
学习设计模式——命令模式
查看>>
【POJ】第一章 C/C++语言概述
查看>>
如何封装自己的js类库
查看>>
项目管理小小知识点总结
查看>>
ASP.NET之Javascript脚本的应用
查看>>
vlan间的互通
查看>>