基础有待加强啊,由该题引发出来一些问题,现在来总结下。

首先是二叉树的结构:

 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(因为上面的判断保证了肯定有一个不为空)

最新文章

  1. css居中div的几种常用方法
  2. mono中发送邮件并保存本次收件人的地址
  3. 一步步开发自己的博客 .NET版(3、注册登录功能)
  4. java8 lamda快速入门
  5. IOS学习笔记 O1
  6. Android中实现倒计时
  7. 信号屏蔽的切换的理解sigsuspend
  8. Android调用WCF
  9. winform form
  10. queue与topic的技术特点对比
  11. EJB学习笔记
  12. 关于The requested PHP extension ext-pdo_sqlite * is missing from your system. Install or enable PHP&#39;s pdo_sqlite extension.的解决
  13. Android的Service组件
  14. ubuntu+anaconda+mxnet环境配置
  15. 关于indexOf,charAt,subString的区别
  16. Android------------------系统服务调用的学习
  17. 设计模式 笔记 中介者模式 Mediator
  18. EhLib 的 DbgridEh 影响 其他数据集的Open方法
  19. Virtual PC局域网共享速度慢的解决半法。转
  20. SQL中distinct的用法(转载)

热门文章

  1. pandas-Notes2
  2. leetcode-22-string
  3. OpenSSL version mismatch. Built against 1000105f, you have 10001060
  4. Hive中集合类型
  5. luogu2053 [SCOI2007]修车
  6. acdsee 15中文版的许可证密钥+激活方法
  7. Leetcode31---&gt;Next Permutation(数字的下一个排列)
  8. day01_04.变量
  9. J2ee项目 编译依赖顺序
  10. install cinnamon on ubuntu 14.04