【二叉树】二叉树的高度以及创建 销毁二叉树
来源:互联网 发布:网络教育网上报名 编辑:程序博客网 时间:2024/05/17 03:04
更多的二叉树题 二叉树面试题
二叉树的高度
分析:求二叉树的高度,可以用递归的思想,先求出左子树的高度,再求出右子树的高度,然后取他们的最大值+1。
递归求二叉树的高度
int GetHight(Node *pRoot){ if(pRoot == NULL) return 0; if(pRoot->left == NULL || pRoot->right == NULL) return 1; int lHight = GetHight(pRoot->left); int rHight = GetHight(pRoot->right); return (LHeigt > RHeight) ? (LHeigt + 1) : (RHeight + 1); }
非递归求二叉树高度
分析:利用层次遍历,统计遍历了几次二叉树。
/* 层次遍历的非递归版本 */ int maxDepthWithLevelTraversal(TreeNode* root){ /* 判断树是否为空 */ if(!root){ return 0; } int height = 0; // 初始化树的高度为0 queue<TreeNode*>Q; // 初始化一个队列,并将根节点入队 Q.push(root); /* 当队列不为空时 */ /* 实际上当每次循环开始时,队列中存储的刚好是将要访问下一层的所有元素*/ while(!Q.empty()){ height++; int curLevelSize = Q.size(); // 记录当前层元素个数 int cnt = 0; /* 弹出当前层所有元素 */ while(cnt < curLevelSize){ TreeNode* temp = Q.front(); Q.pop(); cnt++; /* 将下一层的元素入队列 */ if(temp->left){ Q.push(temp->left); } if(temp->right){ Q.push(temp->right); } } } return height; }
非递归求二叉树
//利用非递归的后序遍历,求出每次栈的大小,最大值即为高度size_t GetHight(Node* pNode){ if (pNode == NULL) return 0; stack<Node*> s; Node *p = pNode; Node *pre = NULL; size_t hight = 0; while (p || !s.empty()) { while (p) { s.push(p); p = p->left; } //栈的最大的值为高度 size_t size = s.size(); hight = size > hight ? size : hight; Node* pTop = s.top(); if (pTop->right == NULL || pTop->right == pre) { pre = pTop; s.pop(); } else { p = pTop->right; } } return hight;}
创建二叉树
思路:已前序遍历的特点来创建二叉树,如果没有左右孩子就用”#”来表示
注意:递归调用时_CreatBinaryTree()的参数pRoot 和index数组下标为引用,
BinaryTree(const T array[], size_t size) :_pRoot(NULL) { size_t index = 0; _CreatBinaryTree(_pRoot, array, size, index); } void _CreatBinaryTree(BinaryTreeNode<T>*& pRoot,const T array[], size_t size, size_t& index) { if (index < size && '#' != array[index]) { pRoot = new BinaryTreeNode<T>(array[index]); _CreatBinaryTree(pRoot->_pLeftChild,array,size,++index); _CreatBinaryTree(pRoot->_pRightChild,array,size,++index); } }
销毁二叉树
思路:采用递归的方法,从下往上 销毁,最后销毁根节点。
void _DestoryBinaryTree(BinaryTreeNode<T>*& pRoot) { if (pRoot) { _DestoryBinaryTree(pRoot->_pLeftChild); _DestoryBinaryTree(pRoot->_pRightChild); delete pRoot; pRoot = NULL; } }
阅读全文
1 0
- 【二叉树】二叉树的高度以及创建 销毁二叉树
- 二叉树的高度/销毁一颗二叉树
- 二叉树的创建 访问 销毁
- 二叉树的创建与销毁
- 二叉树的创建,遍历和销毁
- 二叉树--求二叉树的高度/销毁一颗二叉树
- 二叉树的高度
- 二叉树的高度
- 创建最小高度二叉树
- 二叉树(2)二叉树创建的3种方法,二叉树的递归遍历,二叉树的销毁
- 二叉树的创建、遍历、高度 例子
- 数据结构面试题/求二叉树的高度/销毁一棵二叉树-->
- 求二叉树的高度/销毁一颗二叉树【每日一题】
- 每日一题之求二叉树的高度并销毁一棵二叉树
- 求二叉树的高度和销毁一颗二叉树——题集九
- 求二叉树的高度/销毁一颗二叉树【递归思想】
- 求二叉树的高度/销毁一颗二叉树-->Destroy(Node* root)
- 每日一题——求二叉树的高度,销毁二叉树
- jsp界面上格式化日期
- 变量的执行环境和作用域2
- Java泛型入门
- win7 microsoft office 2013plus 激活 秒激活神器
- [DP 分块] UOJ #300. 【CTSC2017】吉夫特
- 【二叉树】二叉树的高度以及创建 销毁二叉树
- 【计算机视觉】一文看懂:“计算机视觉”到底是个啥?
- 《数据结构学习与实验指导》5-7:新浪微博热门话题
- rxjava2.0使用教程(二)
- 抓到一把锟斤拷
- MATLAB作图一
- 【转】Unity3D 浅谈 Camera(摄像机)
- 通知
- 评估算法的“时间复杂度”与“空间复杂度”