C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同
来源:互联网 发布:snmp 团体名linux 编辑:程序博客网 时间:2024/04/28 18:58
//叶子节点的个数
/*
(1)如果二叉树为空,返回0
(2)如果二叉树不为空且左右子树为空,返回1
(3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数
*/
int GetLeafNodeNum(BTree* root){if(root == NULL)return 0;if(root->m_pLeft == NULL && root->m_pRight == NULL)return 1;int LeafNumOfLeft = GetLeafNodeNum(root->m_pLeft);int LeafNumOfRight = GetLeafNodeNum(root->m_pRight);int ret = LeafNumOfLeft + LeafNumOfRight;return ret;}
/*
判断量个二叉树的结构是否相同
1:如果两个二叉树都为空,那么返回true
2:如果一个二叉树为空,另外一个不为空,那么返回false
3:如果两个二叉树都不为空,那么如果它们的左子树和右子树的结果相同,返回true否则返回false
*/
bool isEqual(BTree* root1, BTree* root2){if(root1 == NULL && root2 == NULL)return true;else if ((root1 == NULL && root2!= NULL)|| (root1 != NULL && root2 == NULL))return false;bool equalLeft = isEqual(root1->m_pLeft,root2->m_pLeft);bool equalRight = isEqual(root1->m_pRight,root2->m_pRight);return (equalLeft && equalRight);}
完整测试代码:
// BTNumOfKLevel.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;class BTree{public:int m_nValue;BTree* m_pLeft;BTree* m_pRight;BTree(int m):m_nValue(m){m_pLeft = m_pRight = NULL;}};//二叉树的插入实现void Insert(int value, BTree* &root){if (root == NULL){root = new BTree(value);}else if(value < root->m_nValue)Insert(value,root->m_pLeft);else if(value > root->m_nValue)Insert(value,root->m_pRight);else;}//叶子节点的个数/*(1)如果二叉树为空,返回0(2)如果二叉树不为空且左右子树为空,返回1(3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数*/int GetLeafNodeNum(BTree* root){if(root == NULL)return 0;if(root->m_pLeft == NULL && root->m_pRight == NULL)return 1;int LeafNumOfLeft = GetLeafNodeNum(root->m_pLeft);int LeafNumOfRight = GetLeafNodeNum(root->m_pRight);int ret = LeafNumOfLeft + LeafNumOfRight;return ret;}/*判断量个二叉树的结构是否相同1:如果两个二叉树都为空,那么返回true2:如果一个二叉树为空,另外一个不为空,那么返回false3:如果两个二叉树都不为空,那么如果它们的左子树和右子树的结果相同,返回true否则返回false*/bool isEqual(BTree* root1, BTree* root2){if(root1 == NULL && root2 == NULL)return true;else if ((root1 == NULL && root2!= NULL)|| (root1 != NULL && root2 == NULL))return false;bool equalLeft = isEqual(root1->m_pLeft,root2->m_pLeft);bool equalRight = isEqual(root1->m_pRight,root2->m_pRight);return (equalLeft && equalRight);}int _tmain(int argc, _TCHAR* argv[]){BTree* m_pRoot = new BTree(4);Insert(3,m_pRoot);Insert(6,m_pRoot);Insert(1,m_pRoot);Insert(2,m_pRoot);Insert(5,m_pRoot);Insert(8,m_pRoot);Insert(7,m_pRoot);Insert(10,m_pRoot);BTree* m_pRoot2 = new BTree(4);Insert(3,m_pRoot2);Insert(6,m_pRoot2);Insert(1,m_pRoot2);Insert(2,m_pRoot2);Insert(5,m_pRoot2);Insert(8,m_pRoot2);Insert(7,m_pRoot2);Insert(10,m_pRoot2);int count = GetLeafNodeNum(m_pRoot);cout<<"叶子节点的个数为:"<<count<<endl;cout<<"两个树的结构是否相同:"<<isEqual(m_pRoot,m_pRoot2);getchar();return 0;}
0 0
- C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同
- 二叉树中叶子节点的个数
- 求二叉树中叶子节点个数,总的节点个数,第K层的节点个数
- 统计二叉树中叶子节点的个数
- 二叉树中叶子节点的个数(递归)
- 二叉树中叶子节点的个数(非递归)
- 求二叉树中叶子结点的个数
- 求二叉树中叶子结点的个数
- 编写递归算法 计算二叉树中叶子节点的个数
- 求二叉树中叶子数的算法
- 二叉树中叶子节点的个数第K层的节点个数
- 二叉树3(统计二叉树中叶子节点的个数)
- 判断两棵二叉树是否结构相同
- 判断两棵二叉树是否相同
- 8-31 编写函数求二叉树中叶子结点的个数
- 输出二叉树中叶子结点的个数
- 判断两棵二叉树是否相同的树
- 计算二叉树中叶子节点的数目
- C语言编程(练习1:分支和跳转 )
- DataGridView生成CSV,XML 和 EXCEL文件
- reading data from a file storage
- 用CSDN博客记录自己的成长
- 【读书笔记】【Delphi高手突破】TCanvas
- C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同
- Android Looper和Handler
- IE8下placeholder提示信息的展示
- 亚马逊云VPS AWS更改LINUX为root权限密码登陆
- Javascript页面宽度高度
- 磁盘速度监控
- maven assembly plugin使用
- svn 安装后文件不显示检出状态(卸载重装)
- ISE14.7和modelsim的联合使用建立方法