二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
来源:互联网 发布:质量好的淘宝店推荐 编辑:程序博客网 时间:2024/06/05 15:56
1、判断二叉树是否为完全二叉树:
层序遍历,从上到下,从左到右,遍历二叉树;
当遇到一个节点的左子树为空时,则该节点的右子树为空和后面遍历的节点都为叶子节点,否则不是完全二叉树。
当该节点只有左子树时,且该子树为叶子结点,否则不为完全二叉树。
判断实现:
bool _IsCompleteBinaryTree(BinaryTreeNode<T>* pRoot){if(pRoot == NULL)return false;queue<BinaryTreeNode<T>*> q;q.push(pRoot);bool IsOnlyLeft = false;bool ret = true;while(!q.empty()){BinaryTreeNode<T>* pNode = q.front();q.pop();if(IsOnlyLeft)//找到了只有左子树的节点{if(pNode->_Left != NULL || pNode->_Right != NULL){ret = false;//不是完全二叉树break;}}else{if(pNode->_Left != NULL && pNode->_Right != NULL){q.push(pNode->_Left);q.push(pNode->_Right);}else if(pNode->_Left != NULL && pNode->_Right == NULL){IsOnlyLeft = true; //找到只有左子树的节点q.push(pNode->_Left);}else if(pNode->_Left == NULL && pNode->_Right != NULL){ret = false;break;}else{IsOnlyLeft = true;}}}return ret;}
2、求二叉树的镜像
递归:
void _Mirror(BinaryTreeNode<T>*& pRoot){if(pRoot == NULL)return;BinaryTreeNode<T>* Left = _Mirror(pRoot->_Left);BinaryTreeNode<T>* Right = _Mirror(pRoot->_Right);pRoot->_Left = Right;pRoot->_Right = Left;}
非递归:循环(栈)
void _Mirror_nor(BinaryTreeNode<T>*& pRoot) { if(NULL == pRoot) return; stack<BinaryTreeNode<T>*> stackTreeNode; stackTreeNode.push(pRoot); while(stackTreeNode.size()) { BinaryTreeNode<T>* pNode = stackTreeNode.top(); stackTreeNode.pop(); if(NULL != pNode->Left || NULL != pNode->Right) { BinaryTreeNode<T>* pTemp = pNode->Left; pNode->Left = pNode->Right; pNode->Right = pTemp; } if(NULL != pNode->Left) stackTreeNode.push(pNode->Left); if(NULL != pNode->Right) stackTreeNode.push(pNode->Right); } }
阅读全文
0 0
- 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
- 二叉树面试题-镜像与判断是否为完全二叉树
- 【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树
- C++算法之 判断是否为平衡二叉树 求二叉树的镜像
- 剑指offer 面试题39 求二叉树深度|判断是否为平衡二叉树
- /***/二叉树经典面试题之判断一棵二叉树是否是完全二叉树
- offer面试题------求二叉树的镜像
- 数据结构面试题/判断一棵树是否是完全二叉树
- (1)判断是否为完全二叉树 (2)求二叉树的高度
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- 二叉树面试题—前,中,后序(非递归),判断是否为完全二叉树
- 二叉树经典面试题1~求二叉树的镜像
- 面试题39(2). 判断是否为平衡二叉树
- 判断一棵树是否为完全二叉树
- 判断是否为完全二叉树
- 判断一棵树是否为完全二叉树
- 判断是否为完全二叉树
- 判断一棵树是否为完全二叉树
- nginx安装lua和echo模块
- 微信小程序之自定义toast实例 —— 微信小程序实战系列(6)
- java作业调度框架Quartz
- aop编程
- mysql之拷贝表
- 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
- H
- HDU 3183 A Magic Lamp (RMQ)
- 集合类
- 使用MyBatis Generator自动创建代码
- Hadoop MultipleInputs.addInputPath 读取多个路径
- 283. Move Zeroes
- ubuntu下执行apt-get update 报异常
- 栈在表达式计算过程中的应用