判断二叉树是否为平衡二叉树(BST)
2016-07-04 16:19
681 查看
给定一个二叉树,判断此树是否为平衡二叉树。平衡二叉树,根节点的值小于右孩子节点的值,且大于左孩子节点的值。
递归方法:bool isValidBST(TreeNode *root, TreeNode *&pre)
{
if (root == NULL)
return true;
if (!isValidBST(root->left, pre))
return false;
if (pre != NULL && pre->val >= root->val)
return false;
pre = root;
return isValidBST(root->right, pre);
}
bool isValidBST(TreeNode* root)
{
TreeNode *pre = NULL;
return isValidBST(root, pre);
}非递归方法:中序遍历思想
递归方法:bool isValidBST(TreeNode *root, TreeNode *&pre)
{
if (root == NULL)
return true;
if (!isValidBST(root->left, pre))
return false;
if (pre != NULL && pre->val >= root->val)
return false;
pre = root;
return isValidBST(root->right, pre);
}
bool isValidBST(TreeNode* root)
{
TreeNode *pre = NULL;
return isValidBST(root, pre);
}非递归方法:中序遍历思想
bool isValidBST(TreeNode* root) { stack<TreeNode *> s; TreeNode *pointer = root; long long val = LLONG_MIN; while (!s.empty() || pointer) { if (pointer) { s.push(pointer); pointer = pointer->left; } else { pointer = s.top(); s.pop(); if (val >= pointer->val) return false; else val = pointer->val; pointer = pointer->right; } } return true; }
相关文章推荐
- 114. Flatten Binary Tree to Linked List
- 判断当前星期几
- C#简单查询SQLite数据库是否存在数据的方法
- Logstash使用grok过滤nginx日志(二)
- Git简单用法
- Android中使用Handler造成内存泄露的分析和总结
- 卡特兰数知识
- JavaScript Promise 实现(三)
- java语言基础入门——变量、数据及常量的介绍
- 交换机吃v喝奶粉v
- VC下双屏显示的实现
- Android 技术干货收集
- 【腾讯bugly干货分享】微信Android热补丁实践演进之路
- TOOLS.INI: TOOLCHAIN NOT INSTALLED
- Flask 使用教程
- java基础之----封装(private)
- MongoDB文档
- 无聊的整数
- 第3章 表 栈 和 队列
- Android 混淆通用Proguard.cfg