Symmetric Tree(DFS,二叉树的构建以及测试代码)
基础有待加强啊,由该题引发出来一些问题,现在来总结下。
首先是二叉树的结构:
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(因为上面的判断保证了肯定有一个不为空)
Symmetric Tree(DFS,二叉树的构建以及测试代码)的更多相关文章
- 【LeetCode】101. Symmetric Tree 对称二叉树(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 [LeetCode] 题目地址 ...
- 二叉树系列 - [LeetCode] Symmetric Tree 判断二叉树是否对称,递归和非递归实现
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...
- [Leetcode] Symmetric tree 对称二叉树
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...
- 【LeetCode】Symmetric Tree(对称二叉树)
这道题是LeetCode里的第101道题.是我在学数据结构——二叉树的时候碰见的题. 题目如下: 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 ...
- 606. Construct String from Binary Tree 从二叉树中构建字符串
[抄题]: You need to construct a string consists of parenthesis and integers from a binary tree with th ...
- 【遍历二叉树】09判断二叉树是否关于自己镜像对称【Symmetric Tree】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,判断是否他自己的镜 ...
- 二叉树BinaryTree构建测试(无序)
此测试仅用于二叉树基本的性质测试,不包含插入.删除测试(此类一般属于有序树基本操作). //二叉树树类 public class BinaryTree { public TreeNode root; ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
- ※数据结构※→☆非线性结构(tree)☆============二叉树 顺序存储结构(tree binary sequence)(十九)
二叉树 在计算机科学中,二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用作二叉查找树和二叉堆或是 ...
随机推荐
- python3与python2的编码问题
在讲这个问题之前,我们先说说unicode的工作原理.unicode包含了跟全球所有国家编码的映射关系,就是不管你用哪个国家的编码,unicode都能找到它在unicode中的编码.那么无论你用什么编 ...
- 思维题:UVa1334-Ancient Cipher
Ancient Cipher Ancient Roman empire had a strong government system with various departments, includi ...
- 2015多校训练第二场 hdu5305
把这题想复杂了,一直在考虑怎么快速的判断将选的边和已选的边无冲突,后来经人提醒发现这根本没必要,反正数据也不大开两个数组爆搜就OK了,搜索之前要先排除两种没必要搜的情况,这很容易想到,爆搜的时候注意几 ...
- chrome无界面模式headless配置
引入Options: 配置浏览器: 配置浏览器options,然后传入webdriver.Chrome()就可以成功使用了.
- Hive安装步骤
首先解压压缩包 然后进入bin 执行 ./hive 不过现在hive使用的是自己默认的数据库,不方便,可以通过配置使用MySQL数据库 创建hive-site.xml 粘贴一下内容 <confi ...
- python面试题解析(前端、框架和其他)
答: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- bzoj3172 luogu3966 [TJOI2013]单词
蒟蒻也能写出来的AC代码!这题是AC自动机模板题.插入单词时用一个没出现过的字符隔开就行了. 一些细节请看注释 #include <iostream> #include <cstri ...
- A+B问题的异常解法
先%XZZ为敬 http://www.cnblogs.com/xzz_233/p/a-plus-b-problem.html 万恶之源:https://www.luogu.org/discuss/sh ...
- oracle结构-内存结构与动态内存管理
内存结构与动态内存管理 内存是影响数据库性能的重要因素. oracle8i使用静态内存管理,即,SGA内是预先在参数中配置好的,数据库启动时就按这些配置来进行内在分配,oracle10g引入了动态内存 ...
- 豆邮windows客户端(第三方)开发详解
“豆邮”,是社区网站“豆瓣”的一个类似私信的功能模块.在豆瓣官网,“豆邮”曾一度被改为“私信”,但在遭到众多豆瓣用户的强烈反对之后又改了回来.然而,在豆瓣的移动客户端上,仍称呼为“私信”. 豆邮的设定 ...