二叉树的深度及平衡二叉树40
来源:互联网 发布:盛势网络剧07bilibili 编辑:程序博客网 时间:2024/06/08 04:09
题目一:输入一颗二叉树的根节点,求该树的深度。从根节点直到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径长度为树的深度。
二叉树结点定义:
struct BinTreeNode{ int m_value; BinTreeNode *left; BinTreeNode *right; //创建根节点,值为e BinTreeNode* createRoot(int e); //将e作为当前结点的左孩子值插入 void insertAsLC(int e); //将e作为当前结点的右孩子值插入 void insertAsRC(int e);};
解法(递归):
//题目一,求二叉树的深度int TreeDepth(BinTreeNode *pRoot){ if(pRoot == NULL) return 0; int left = TreeDepth(pRoot->left); int right = TreeDepth(pRoot->right); return (left > right) ? left + 1 : right + 1;}
题目二:输入一颗二叉树的节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子节点的深度相差不超过1,那么它就是一棵平衡二叉树。
解题思路:利用二叉树后序遍历的特点 LRV
测试用例:
int main(){ //创建一颗A树 BinTreeNode *A = new BinTreeNode; A->m_value = 8; A->insertAsLC(8); A->insertAsRC(7); A->left->insertAsLC(9); A->left->insertAsRC(2); A->left->right->insertAsLC(4); A->left->right->insertAsRC(7); //A树深度 std::cout << TreeDepth(A) << std::endl; //Output: 4 //判断二叉树是否是平衡二叉树 std::cout << IsBalancedTree(A); //Output: 0 return 0;}
函数实现:
//题目二:判断二叉树是否是平衡二叉树bool IsBalancedTree(BinTreeNode *pRoot, int *pDepth){ //pDepth: 记录深度 if(pRoot == NULL){ *pDepth = 0; return true; //如果是0当然平衡... } int left, right; if(IsBalancedTree(pRoot->left, &left) && IsBalancedTree(pRoot->right, &right)){ int diff = left - right; if(diff <= 1 && diff >= -1){ *pDepth = 1 + (left > right ? left : right); return true; } } return false;}//主函数bool IsBalancedTree(BinTreeNode *pRoot){ int depth = 0; //记录深度 return IsBalancedTree(pRoot, &depth);}
其他函数:
//其他函数实现//创建根节点,值为eBinTreeNode* BinTreeNode::createRoot(int e){ BinTreeNode *root = new BinTreeNode; root->m_value = e; return root; }//作为节点的左孩子插入元素evoid BinTreeNode::insertAsLC(int e){ BinTreeNode *Left = new BinTreeNode; Left->m_value = e; this->left = Left;}//作为节点的右孩子插入元素evoid BinTreeNode::insertAsRC(int e){ BinTreeNode *Right = new BinTreeNode; Right->m_value = e; this->right = Right;}
0 0
- 二叉树的深度及平衡二叉树40
- 二叉树的深度,平衡二叉树深度
- 求二叉树的最大深度、最小深度、反转二叉树及判断是否为平衡二叉树
- 平衡二叉树(二叉树深度+DFS)
- 二叉树深度、平衡二叉树的判断
- 【笔试】50、二叉树的深度&&判断平衡二叉树
- 二叉树的深度和平衡二叉树
- 二叉树的深度以及判断平衡二叉树
- 剑指Offer: 二叉树的深度、平衡二叉树
- 二叉树的深度,判断是否是平衡二叉树
- 剑指Offer 39 二叉树的深度+平衡二叉树
- 二叉树的深度以及判断平衡二叉树
- 求二叉树的深度及判断一个二叉树是否是二叉平衡树(剑指offer39)
- 二叉排序树及平衡二叉树的实现
- 平衡二叉树的
- 二叉树的深度,平衡二叉树,二叉树的镜像
- 剑指offer 39-二叉树的深度 判断二叉树是否为平衡二叉树
- 计算二叉树的深度,判断二叉树是否是平衡二叉树
- Unique Paths II 带有障碍的网格中起点到终点的个数
- MarkDown渲染无法显示
- Linux下find命令使用
- 用类模板改写stack
- 【c++程序】取一个数的近似值
- 二叉树的深度及平衡二叉树40
- js---javaScript九九乘法表演示、导入css的使用
- 2016.6.18纪中模拟赛
- 1018
- 小白进阶之堆排序
- info
- 查找斐波纳契数列中第 N 个数。
- Activity的生命周期
- android 让一个控件按钮居于底部的几种方法