剑指 Offer 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
示例 1:
输入:A = [1,2,3], B = [3,1]
输出:false
示例 2:
输入:A = [3,4,5,1,2], B = [4,1]
输出:true
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(A==NULL||B==NULL) return false;
else if(A->val==B->val && jud(A->left,B->left) && jud(A->right,B->right))
{
return true;
}
else return isSubStructure(A->left,B)||isSubStructure(A->right,B);
}
bool jud(TreeNode* a,TreeNode* b)
{
if(b==NULL) return true;
if(a==NULL) return false;
if(a->val!=b->val) return false;
else return jud(a->left,b->left) && jud(a->right,b->right);
}
};
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
注意:对对称的理解
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool compare(TreeNode* l,TreeNode* r)
{
if(l==NULL&&r==NULL) return true;
else if(l==NULL&&r!=NULL) return false;
else if(l!=NULL&&r==NULL) return false;
else if(l->val!=r->val) return false;
else return compare(l->left,r->right)&&compare(r->left,l->right);
}
bool isSymmetric(TreeNode* root) {
if(root==NULL) return true;
return compare(root->left,root->right);
}
};
剑指 Offer 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
stack<TreeNode*> s;
if(root!=NULL) s.push(root);
while(!s.empty())
{
TreeNode* cur = s.top();
s.pop();
swap(cur->left,cur->right);
if(cur->left!=NULL) s.push(cur->left);
if(cur->right!=NULL) s.push(cur->right);
}
return root;
}
};