每日一练(40) - 判断二叉树是否是一颗平衡二叉树
2013-07-16 20:13
471 查看
题目来自剑指Offer
题目:
思路:
类似后序遍历,同时要判断左右子树是否为平衡二叉树。
代码:
树的构建类似树的子结构,这里不再详述。
题目:
思路:
类似后序遍历,同时要判断左右子树是否为平衡二叉树。
代码:
#include <iostream> #include <assert.h> using namespace std; const int SIZE = 100; struct BinaryTreeNode { char m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; bool IsBalance(BinaryTreeNode* pRoot,int& nDepth) { if (!pRoot) { nDepth = 0; return true; } int nLeftDepth = -1; int nRightDepth = -1; int nDiff = -1; if (IsBalance(pRoot->m_pLeft,nLeftDepth) && IsBalance(pRoot->m_pRight,nRightDepth)) { nDiff = nLeftDepth - nRightDepth; if (nDiff >= -1 && nDiff <= 1) { nDepth = max(nLeftDepth,nRightDepth) + 1; return true; } } return false; } bool IsBalance(BinaryTreeNode* pRoot) { if (pRoot == NULL) { cout<<"空树!"<<endl; return false; } int nDepth = 0; return IsBalance(pRoot,nDepth); } void Create(BinaryTreeNode*& pRoot) { char newData; cin >> newData; if ('#' == newData) { pRoot = NULL; } else { pRoot = new BinaryTreeNode; pRoot->m_nValue = newData; Create(pRoot->m_pLeft); Create(pRoot->m_pRight); } } int main() { BinaryTreeNode* pRoot = NULL; Create(pRoot); if (IsBalance(pRoot)) { cout<<"平衡二叉树!"<<endl; } else { cout<<"不是平衡二叉树!"<<endl; } system("pause"); return 1; }注意:
树的构建类似树的子结构,这里不再详述。
相关文章推荐
- 每日一题之判断一棵二叉树是否是平衡二叉树以及求一颗二叉树的镜像
- 判断一颗二叉树是否是平衡二叉树
- -判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 【算法】判断一颗二叉树是否是平衡二叉树
- 判断一颗二叉树是否是平衡二叉树
- Leetcode 110 判断一颗二叉树是否是平衡二叉树
- day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在
- 判断一颗二叉树是否是平衡二叉树
- 后序遍历求解判断一颗二叉树是否为平衡二叉树
- 判断一颗二叉树是否为平衡二叉树
- 【二叉树8】判断一颗树是否是平衡二叉树
- 判断一棵二叉树是否是平衡二叉树并求一颗二叉树的镜像——题集十
- 判断一颗二叉树是否为平衡二叉树(AVL)
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树
- 判断一颗二叉树是否为平衡二叉树
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- java数据结构-二叉树-判断一颗二叉树是否为平衡二叉树
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 如何判断一个二叉树是否为平衡二叉树。