博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断一棵二叉树是否为平衡二叉树
阅读量:7080 次
发布时间:2019-06-28

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

hot3.png

题目:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过 1 ,那么它就是一棵平衡二叉树。

每个节点只遍历一次的解法:

    由于当使用后序遍历的方式遍历二叉树的每一个节点,在遍历到一个节点之前已经遍历了它的左右子树。因此,只要在遍历每个节点的时候记录它的深度(某一节点的深度等于它到叶子节点的路径长度),就可以一边遍历一边判断每个节点是不是平衡的。代码如下:

//判断一棵二叉树是不是为一棵平衡二叉树#include
using namespace std;typedef int ElemType;typedef struct TNode{ ElemType value; struct TNode *pLeftChild; struct TNode *pRightChild;}TreeNode, *BinaryTree;TreeNode* CreateTreeNode(ElemType e){ TreeNode *pNode = new TreeNode(); pNode->value = e; pNode->pLeftChild = NULL; pNode->pRightChild = NULL; return pNode;}void ConnectionTreeNode(TreeNode *pParent, TreeNode *pLeft, TreeNode *pRight){ if(pParent == NULL) return; pParent->pLeftChild = pLeft; pParent->pRightChild = pRight;}TreeNode* CreateBinaryTree(){ TreeNode *pNode1 = CreateTreeNode(1); TreeNode *pNode2 = CreateTreeNode(2); TreeNode *pNode3 = CreateTreeNode(3); TreeNode *pNode4 = CreateTreeNode(4); TreeNode *pNode5 = CreateTreeNode(5); TreeNode *pNode6 = CreateTreeNode(6); TreeNode *pNode7 = CreateTreeNode(7); ConnectionTreeNode(pNode1, pNode2, pNode3); ConnectionTreeNode(pNode2, pNode4, pNode5); //ConnectionTreeNode(pNode3, NULL, pNode6); ConnectionTreeNode(pNode5, pNode7, NULL); //ConnectionTreeNode(pNode1, NULL, NULL); return pNode1;}bool IsBalanced(TreeNode *pRoot, int *pDepth){ if(pRoot == NULL) { *pDepth = 0; return true; } int left, right; if(IsBalanced(pRoot->pLeftChild, &left) && IsBalanced(pRoot->pRightChild, &right)) { int diff = left - right; if(diff <= 1 && diff >= -1) { *pDepth = (left > right) ? (left + 1) : (right + 1); return true; } } return false;}bool IsBinaryTreeBalanced(TreeNode *pRoot){ int depth = 0; return IsBalanced(pRoot, &depth);}int main(){ TreeNode *pNode = CreateBinaryTree(); bool result = IsBinaryTreeBalanced(pNode); if(result) cout << "这是一棵平衡二叉树!!" << endl; else cout << "这不是一棵平衡二叉树!!" << endl; system("pause"); return 0;}

    用后序遍历的方式遍历整棵二叉树。在遍历某节点的左右子节点之后,可以根据它的左右子节点的深度判断它是不是平衡的,并得到当前节点的深度。当最后遍历到树的根节点的时候,也就是判断了一棵二叉树是不是平衡的。

转载于:https://my.oschina.net/u/2260265/blog/349646

你可能感兴趣的文章
iftop监控网卡,ip流量
查看>>
机器学习 - 回归分析
查看>>
MySQL(七)之多表查询
查看>>
File创建文件
查看>>
Mysql关键字冲突的解决方案
查看>>
asp.net开发3层架构 每一层作用
查看>>
1、VMware中CentOS6.5启动出现An error occurred during the file system check
查看>>
php 微信开发模式小结
查看>>
Cacti模板制作
查看>>
linux 系统配置文件总结
查看>>
日常工作中的监控项都有哪些?
查看>>
翻身的废鱼——论PHP从入门到放弃需要多久?11
查看>>
3、Android构建仪表测试
查看>>
【Android】自定义ListView的Adapter报空指针异常解决方法
查看>>
djangoORM之查询
查看>>
[APUE]文件和目录(中)
查看>>
《APUE》读书笔记-第十六章网络IPC:套接字
查看>>
2019-05-25 Java学习日记之List集合
查看>>
Android学习笔记(持续更新)
查看>>
hdu2147
查看>>