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);  }
}

二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像相关推荐

  1. 数据结构实验之二叉树八:(中序后序)求二叉树的深度

    Description 已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度. Input 输入数据有多组,输入T,代表有T组数据.每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的 ...

  2. 判断完全二叉树及求二叉树深度完整代码

    完全二叉树定义:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下.从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二 ...

  3. 判断一棵树是否为完全二叉树的算法c语言,判断是否为完全二叉树

    什么是二叉树(Binary Tree) 每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒. 二叉树包含三种特殊的二叉树,完全二叉树.完满二叉 ...

  4. 数据结构实验之求二叉树后序遍历和层次遍历

    数据结构实验之求二叉树后序遍历和层次遍历 Description 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历. Input 输入数据有多组,第一行是一个整数t (t<100 ...

  5. sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历

    数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descr ...

  6. 求二叉树节点个数、叶子节点、节点层次与宽度

    需实现:(1)输出二叉树b的节点个数 (2)输出二叉树b的叶子节点个数 (3)求二叉树b中指定节点值(假设所有节点值不同)的节点的层次. (4)利用层次遍历求二叉树b的宽度 #include < ...

  7. 数据结构之 二叉树---求二叉树后序遍历和层次遍历(先建树,再遍历)

    数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入 ...

  8. 求二叉树b的结点个数、叶子结点个数

    #include"tree.cpp" //包含了二叉树的基本算法/*-------- 求二叉树b的结点个数.叶子结点个数 ---------*///求二叉树b的结点个数 int N ...

  9. 判断一棵树是否为完全二叉树的算法c语言_别再翻了,面试二叉树看这 11 个就够了!||CSDN博客精选...

    作者:一只不甘平凡的小鹿 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很 ...

最新文章

  1. Apache服务器部署(1)
  2. 数据科学+python+R+数据库+机器学习+(速查表)cheat sheets大全
  3. ubuntu/debian 安装SSH,并开启
  4. [大话数据结构-读书笔记] 栈
  5. Dubbo接口测试方法及步骤
  6. 比尔-盖茨写给即将走出学校、踏入社会的青年一代的11点忠告
  7. tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
  8. if else 工厂模式_没有IF-ELSE的工厂
  9. [css] 能不能使用纯css使你的浏览器卡死?怎么实现?
  10. 论文阅读课3-GraphRel: Modeling Text as Relational Graphs for(实体关系联合抽取,重叠关系,关系之间的关系,自动提取特征)
  11. gitd mysql_MySQL GTID (一)
  12. python 格式化输出
  13. 随想录(linux下的pv操作)
  14. 关于在IBatis中返回DataSet
  15. IPS不用添加service帐号进入linux使得管理主机能访问的方法
  16. 关闭Windows 10系统更新以及查看电脑机型
  17. 【渝粤教育】国家开放大学2019年春季 1250文论专题 参考试题
  18. 今晚我准备用R语言爬下这几个视频网站!
  19. 网站商业计划书实例(商业网站策划书实例)
  20. c语言打开文件并输出,文件的读取,c语言打开文件并输出

热门文章

  1. 实验五 类和对象-3
  2. [转]vue全面介绍--全家桶、项目实例
  3. UWP开发细节记录:判断文件类型
  4. 关于开源中国手机App的说明
  5. MyBatis 在xml文件中处理大于号小于号的方法
  6. zookeeper伪集群(在一台机器上集群)
  7. oracle创建表空间和用户授权
  8. java中可重入锁的学习总结
  9. XP系统中没有Internet信息服务windows组件解决办法
  10. 网站故障排查几个简单步骤