二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
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); }
}
二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像相关推荐
- 数据结构实验之二叉树八:(中序后序)求二叉树的深度
Description 已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度. Input 输入数据有多组,输入T,代表有T组数据.每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的 ...
- 判断完全二叉树及求二叉树深度完整代码
完全二叉树定义:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下.从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二 ...
- 判断一棵树是否为完全二叉树的算法c语言,判断是否为完全二叉树
什么是二叉树(Binary Tree) 每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒. 二叉树包含三种特殊的二叉树,完全二叉树.完满二叉 ...
- 数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历 Description 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历. Input 输入数据有多组,第一行是一个整数t (t<100 ...
- sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descr ...
- 求二叉树节点个数、叶子节点、节点层次与宽度
需实现:(1)输出二叉树b的节点个数 (2)输出二叉树b的叶子节点个数 (3)求二叉树b中指定节点值(假设所有节点值不同)的节点的层次. (4)利用层次遍历求二叉树b的宽度 #include < ...
- 数据结构之 二叉树---求二叉树后序遍历和层次遍历(先建树,再遍历)
数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入 ...
- 求二叉树b的结点个数、叶子结点个数
#include"tree.cpp" //包含了二叉树的基本算法/*-------- 求二叉树b的结点个数.叶子结点个数 ---------*///求二叉树b的结点个数 int N ...
- 判断一棵树是否为完全二叉树的算法c语言_别再翻了,面试二叉树看这 11 个就够了!||CSDN博客精选...
作者:一只不甘平凡的小鹿 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很 ...
最新文章
- Apache服务器部署(1)
- 数据科学+python+R+数据库+机器学习+(速查表)cheat sheets大全
- ubuntu/debian 安装SSH,并开启
- [大话数据结构-读书笔记] 栈
- Dubbo接口测试方法及步骤
- 比尔-盖茨写给即将走出学校、踏入社会的青年一代的11点忠告
- tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
- if else 工厂模式_没有IF-ELSE的工厂
- [css] 能不能使用纯css使你的浏览器卡死?怎么实现?
- 论文阅读课3-GraphRel: Modeling Text as Relational Graphs for(实体关系联合抽取,重叠关系,关系之间的关系,自动提取特征)
- gitd mysql_MySQL GTID (一)
- python 格式化输出
- 随想录(linux下的pv操作)
- 关于在IBatis中返回DataSet
- IPS不用添加service帐号进入linux使得管理主机能访问的方法
- 关闭Windows 10系统更新以及查看电脑机型
- 【渝粤教育】国家开放大学2019年春季 1250文论专题 参考试题
- 今晚我准备用R语言爬下这几个视频网站!
- 网站商业计划书实例(商业网站策划书实例)
- c语言打开文件并输出,文件的读取,c语言打开文件并输出