每日一题之判断一棵二叉树是否是平衡二叉树以及求一颗二叉树的镜像
来源:互联网 发布:java html5 整合 框架 编辑:程序博客网 时间:2024/05/21 12:28
1,检查一棵树是否是平衡二叉树:
首先我们应该了解什么是平衡二叉树?平衡二叉树:它的左右子树的高度差不会超过1,并且左右字树都是一颗平衡二叉树,它的实现方法有AVL,红黑树等等。
首先以递归的方式来实现:
#include<iostream>#include<math.h>using namespace std;struct Node//定义这棵树{int value;Node* left;Node* right;};bool Isbalance(Node* ptreeNode){if (ptreeNode == NULL)return true;int LTreedepth = Depth(ptreeNode->left);int RTreedepth = Depth(ptreeNode->right);int diff = LTreedepth - RTreedepth;if (abs(diff) > 1)return false;return Isbalance(ptreeNode->left) && Isbalance(ptreeNode->right);}//以递归的方式实现int Depth(Node* ptreeNode){if (ptreeNode == NULL)return 0;int LTreedepth = Depth(ptreeNode->left);//这个树的左深度int RTreedepth = Depth(ptreeNode->right);//这个树的右深度return (LTreedepth > RTreedepth) ? (LTreedepth + 1) : (RTreedepth + 1);}但是如果是以上面的方式实现的话它的时间复杂度是O(n^2),因为首先需要把左右子树遍历一遍,再需要检查是否平衡又要遍历一遍,所以需要遍历两遍,所以我们需要改进:
#include<iostream>#include<math.h>using namespace std;struct Node//定义这棵树{int value;Node* left;Node* right;};bool _Isbalance(Node* ptreeNode, int* depth){if (ptreeNode == NULL){*depth = 0;return true;}int LTreedepth, RTreedepth;bool left = _Isbalance(ptreeNode->left, <reedepth);bool right = _Isbalance(ptreeNode->right, &RTreedepth);if (left&&right){int diff = LTreedepth - RTreedepth;if (abs(diff) < 1){*depth = 1 + (LTreedepth>RTreedepth ? LTreedepth : RTreedepth);return true;}}return false;}bool Isbalance(Node* ptreeNode){int depth = 0;return _Isbalance(ptreeNode, &depth);}2,求一棵二叉树的镜像
如图所示:
代码实现:
#include<iostream>using namespace std;struct Node//定义这棵树{int value;Node* left;Node* right;};void MirrorReTree(Node* pNode){if (pNode == NULL)return;if (pNode->left == NULL&&pNode->right == NULL)return;Node* tmp = pNode->left;pNode->left = pNode->right;pNode->right = tmp;if (pNode->left)MirrorReTree(pNode->left);if (pNode->right)MirrorReTree(pNode->right);}
阅读全文
0 0
- 每日一题之判断一棵二叉树是否是平衡二叉树以及求一颗二叉树的镜像
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- -判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 二叉树--判断一棵二叉树是否是平衡二叉树&&求一颗二叉树的镜像
- 每日一题——判断二叉树是否平衡,求一棵二叉树的镜像
- 判断一棵二叉树是否是平衡二叉树并求一颗二叉树的镜像——题集十
- day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在
- 【二叉树】判断一棵二叉树是否是平衡二叉树/求一棵二叉树的镜像/对称的二叉树
- 判断一棵二叉树是否是平衡二叉树
- 判断一颗二叉树是否是平衡二叉树
- 数据结构之如何判断一棵二叉树是否是平衡二叉树(AVL树)
- 剑指Offer--039-平衡二叉树(判断一棵二叉树是否是平衡二叉树)[扩展附加题]
- 【二叉树】判断一棵二叉树是否是平衡二叉树
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 移动端海洋实时仿真技术研究与实现
- Java8新特性 细说Lambda
- ubuntu16.04安装NVIDIA驱动最简单的方法
- getHibernateFlushMode is not valid without active transaction;
- oracle恢复删除数据(误删)
- 每日一题之判断一棵二叉树是否是平衡二叉树以及求一颗二叉树的镜像
- 时间戳转化为时间格式
- 计蒜客————乳草的侵占
- C++继承体系
- 使用JDBC获取插入记录的自增主键值
- {A} + {B}
- LitJson 不支持 float 类型数据
- ext2fs/ext2_fs.h:没有那个文件或目录
- PCIe学习笔记(28)--- PL