判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
2017-07-24 11:54
405 查看
根据平衡二叉树的定义,如果任意节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。
首先编写一个计算二叉树深度的函数,利用递归实现。
二叉树的镜像其实就是原二叉树所有节点的左右子树互相交换后的结果,所以可以用一个递归来解决问题,依次递归二叉树的所有节点,然后交换这个节点左右子树,直到根节点。
首先编写一个计算二叉树深度的函数,利用递归实现。
int Depth(TreeNode*pRoot) { if (pRoot == NULL) return 0; else { int ld = Depth(pRoot->left); int rd = Depth(pRoot->right); return ld > rd ? (ld + 1) : (rd + 1); } } bool IsBalanceTree(TreeNode*pRoot) { if (pRoot == NULL) return false; int ld = Depth(pRoot->left); int rd = Depth(pRoot->right); int dif = ld - rd; if (dif > 1 || dif < -1) return false; return IsBalanceTree(pRoot->left) && IsBalanceTree(pRoot->right); }
二叉树的镜像其实就是原二叉树所有节点的左右子树互相交换后的结果,所以可以用一个递归来解决问题,依次递归二叉树的所有节点,然后交换这个节点左右子树,直到根节点。
void Mirror(TreeNode *pRoot) { if (pRoot == NULL || (pRoot->left == NULL) && (pRoot->right == NULL)) return; TreeNode*temp = pRoot->left; pRoot->left = pRoot->right; pRoot->right = temp; if (pRoot->left){ Mirror(pRoot->left); } if (pRoot->right){ Mirror(pRoot->right); } }
相关文章推荐
- 判断一棵二叉树是否是平衡二叉树并求一颗二叉树的镜像——题集十
- 每日一题之判断一棵二叉树是否是平衡二叉树以及求一颗二叉树的镜像
- -判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 二叉树--判断一棵二叉树是否是平衡二叉树&&求一颗二叉树的镜像
- 【二叉树】判断一棵二叉树是否是平衡二叉树/求一棵二叉树的镜像/对称的二叉树
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- Leetcode 110 判断一颗二叉树是否是平衡二叉树
- java数据结构-二叉树-判断一颗二叉树是否为平衡二叉树
- 判断一颗二叉树是否为平衡二叉树
- 判断一棵二叉树的镜像是否为其自己
- 判断一棵二叉树是否为平衡二叉树(待续!!!!)
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 【二叉树11】判断一颗二叉树本身是否为镜像
- 【算法】判断一颗二叉树是否是平衡二叉树
- 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
- 二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树