Symmetric Tree(DFS,二叉树的构建以及测试代码)
2024-08-25 23:23:48
基础有待加强啊,由该题引发出来一些问题,现在来总结下。
首先是二叉树的结构:
struct TreeNode {
EleType val;
TreeNode *left;
TreeNode *right;
};
然后是二叉树,先序遍历的构建方法,由于只有扩展后的二叉树可以做到一个遍历序列确定一颗二叉树,比如图所示前序遍历序列(根左右)就为12#4##3##。
二叉树构建的代码,因为要对传递的值进行改变,所以不能值传递,所以注意这里的参数为指向TreeNode类型的指针的一个引用,
这是因为如果直接传递指针变量,给该函数的形参初始化之后,该形参在退出该函数就自动回收啦。
int CreateBiTree(TreeNode* &T)
{
char data;
//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树
scanf("%c",&data);
if(data == '#'){
T = NULL;
}
else{
T = (TreeNode*)malloc(sizeof(TreeNode));
T->val = data;
CreateBiTree(T->left);
CreateBiTree(T->right);
}
return ;
}
该题的思路:主要有递归和栈来实现两种方法。中心对称即左子树中某个节点的左孩子=对应的右子树的节点的右孩子,该节点的右孩子=对应结点的左孩子。
代码:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
typedef int EleType; struct TreeNode {
EleType val;
TreeNode *left;
TreeNode *right;
}; class Solution {
public:
bool check(TreeNode *leftNode, TreeNode *rightNode)
{
if (leftNode == NULL && rightNode == NULL)
return true; if (leftNode == NULL || rightNode == NULL)
return false; return leftNode->val == rightNode->val && check(leftNode->left, rightNode->right) &&
check(leftNode->right, rightNode->left);
} bool isSymmetric(TreeNode *root) {
if (root == NULL)
return true;
return check(root->left, root->right);
}
}; //按先序序列创建二叉树
int CreateBiTree(TreeNode* &T){
int data;
//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树
cin>>data;
if(data == -1){
T = NULL;
}
else{
T = (TreeNode*)malloc(sizeof(TreeNode));
//生成根结点
T->val = data;
//构造左子树
CreateBiTree(T->left);
//构造右子树
CreateBiTree(T->right);
}
return ;
} int main()
{
freopen("C:\\Users\\Administrator\\Desktop\\test.txt","r",stdin);
TreeNode* root=NULL;
CreateBiTree(root);
Solution so;
cout<<so.isSymmetric(root)<<endl;
return ;
}
ps:递归的终止条件:左节点和右节点都为空,则true;
左节点和右节点中只有一个不为空,返回false(因为上面的判断保证了肯定有一个不为空)
最新文章
- css居中div的几种常用方法
- mono中发送邮件并保存本次收件人的地址
- 一步步开发自己的博客 .NET版(3、注册登录功能)
- java8 lamda快速入门
- IOS学习笔记 O1
- Android中实现倒计时
- 信号屏蔽的切换的理解sigsuspend
- Android调用WCF
- winform form
- queue与topic的技术特点对比
- EJB学习笔记
- 关于The requested PHP extension ext-pdo_sqlite * is missing from your system. Install or enable PHP&#39;s pdo_sqlite extension.的解决
- Android的Service组件
- ubuntu+anaconda+mxnet环境配置
- 关于indexOf,charAt,subString的区别
- Android------------------系统服务调用的学习
- 设计模式 笔记 中介者模式 Mediator
- EhLib 的 DbgridEh 影响 其他数据集的Open方法
- Virtual PC局域网共享速度慢的解决半法。转
- SQL中distinct的用法(转载)
热门文章
- pandas-Notes2
- leetcode-22-string
- OpenSSL version mismatch. Built against 1000105f, you have 10001060
- Hive中集合类型
- luogu2053 [SCOI2007]修车
- acdsee 15中文版的许可证密钥+激活方法
- Leetcode31--->;Next Permutation(数字的下一个排列)
- day01_04.变量
- J2ee项目 编译依赖顺序
- install cinnamon on ubuntu 14.04