首页 > 代码库 > leetcode:Symmetric Tree
leetcode:Symmetric Tree
基础有待加强啊,由该题应发出来一些问题,现在来总结下。
首先是二叉树的结构:
struct TreeNode { EleType val; TreeNode *left; TreeNode *right; };
然后是二叉树,先序遍历的构建方法,由于只有扩展后的二叉树可以做到一个遍历序列确定一颗二叉树,比如图所示前序遍历序列(根左右)就为12#4##3##。
二叉树构建的代码,因为要对传递的值进行改变,所以不能值传递,所以注意这里的参数为指向TreeNode类型的指针的一个引用,
这是因为如果直接传递指针变量,给该函数的形参初始化之后,该形参在退出该函数就自动回收啦。
int CreateBiTree(TreeNode* &T){ char data; //按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树 scanf("%c",&data); if(data =http://www.mamicode.com/= ‘#‘){ T = NULL; } else{ T = (TreeNode*)malloc(sizeof(TreeNode)); T->val = data; CreateBiTree(T->left); CreateBiTree(T->right); } return 0; }
该题的思路:主要有递归和栈来实现两种方法。
代码:
#include <iostream>#include <vector>#include <cmath>using namespace std;typedef char 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) { // Start typing your C/C++ solution below // DO NOT write int main() function if (root == NULL) return true; return check(root->left, root->right); }};//按先序序列创建二叉树 int CreateBiTree(TreeNode* &T){ char data; //按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树 scanf("%c",&data); if(data =http://www.mamicode.com/= ‘#‘){ T = NULL; } else{ T = (TreeNode*)malloc(sizeof(TreeNode)); //生成根结点 T->val = data; //构造左子树 CreateBiTree(T->left); //构造右子树 CreateBiTree(T->right); } return 0; } int main(){ freopen("a.txt","r",stdin); TreeNode* root=NULL; CreateBiTree(root); Solution so; cout<<so.isSymmetric(root)<<endl; return 0;}
leetcode:Symmetric Tree
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。