37. 树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。
我们规定空树不是任何树的子结构。
class Solution { public: map<TreeNode*,bool> mp bool issub(TreeNode* p1,TreeNode* p2){ if(p2 == NULL) return true; if(p1 == NULL) return false; if(p1->val != p2->val) return issub(p1->left,p2) || issub(p1->right,p2); return issub(p1->left,p2->left) && issub(p1->right,p2->right) || issub(p1->left,p2) || issub(p1->right,p2); } bool hasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if(pRoot2 == NULL) return false; return issub(pRoot1,pRoot2); } };
38. 二叉树的镜像
输入一个二叉树,将它变换为它的镜像。
class Solution { public: void mirror(TreeNode* root) { TreeNode* t; if(!root) return; t = root->left; root->left = root->right; root->right = t; mirror(root->left); mirror(root->right); } };
39. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。
如果一棵二叉树和它的镜像一样,那么它是对称的。
class Solution { public: bool issym(TreeNode* p1,TreeNode* p2){ if(!p1 && !p2) return true; if(!p1 || !p2) return false; if(p1->val != p2->val) return false; return issym(p1->left,p2->right) && issym(p1->right,p2->left); } bool isSymmetric(TreeNode* root) { if(!root) return true; return issym(root->left,root->right); } };
原文:https://www.cnblogs.com/Aliencxl/p/12335839.html