请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/
2 2
/ /
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/
2 2
3 3
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
T:O(n) S:O(n)
镜像二叉树满足3个条件:
/*** 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 isMirror(TreeNode* t1, TreeNode* t2) {if (!t1 && !t2) return true;if (!t1 || !t2) return false;return (t1->val == t2->val) && isMirror(t1->left, t2->right) && isMirror(t1->right, t2->left);}bool isSymmetric(TreeNode* root) {return isMirror(root, root);}
};
T:O(n) S:O(n)
两个指针从根节点出发,一个指针(根 左 右)的顺序进行遍历,一个指针(根 右 左)的顺序进行便来遍历。 看每个时刻指针指的是否是相同值得节点。
PS:不能先求出两个序列, 再比较两个序列是否相等。 先序遍历是不能唯一确定一颗二叉树的
/*** 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 isSymmetric(TreeNode* root) {stack stk1, stk2;TreeNode *p1, *p2;p1 = p2 = root;while (p1 || !stk1.empty()) {while (p1) {if (!p2 || p1->val != p2->val) return false; // 这里p1不可能为null, 所以还要检查p2是否为空,p2是null则返回falsestk1.push(p1);stk2.push(p2);p1 = p1->left; // p1一直往左遍历p2 = p2->right; // p2一直往右遍历}if (p2) return false; // 这里p1是null, 所以检查p2是否为空, p2不空则返回falsep1 = stk1.top(); stk1.pop();p1 = p1->right;p2 = stk2.top(); stk2.pop();p2 = p2->left;}return true; }
};
题目:从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回其层次遍历结果: [ [3], [9,20], [...
题目:二叉树的镜像 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 4 / 2 7 / / 1 3 6 9 镜像输出: 4 / 7 2 / / 9 6 3 1 示例 1: 输入:root =...
题目:树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / 4 5 / 1 2 给定的树 B: 4 / 1 返回 true,因为 B...
下面是树类型题目需要用到的头文件tree.h,请包含在cpp文件中编译,而不是放在c文件中编译,比如查找树中两个节点的最低公共父结点的题common_parent_in_tree.cpp,编译它的方法是: g++ -g common_parent_in_tree.cpp -o common_parent_in_tree 下...
1 == (1)当对象是基本数据类型时,比较值; (2)当对象是引用型时,比较的是地址值!!1 2 equals():只处理引用型数据;Object类中的equals方法依然比较的是地址值! 但在String,File,Date类重写了equals方法,比较的是值; 3 String类内存解析 Person p1=n...
代码: % x = [-0.9, 0.81]; [y, L, B] = QCoeff(x, 3) % Unquantized parameters r = 0.9; theta = pi/3; a1 = -2*r*cos(theta); a2 = r*r; p1 = r*exp(j*theta); p2 = p1';% Quan...
【描述】 公元19881231年,一颗巨大的陨石坠落在世界的政治文化中心cs。于是,灾难降临了,地球上出现了一系列反常的现象。当人们焦急万分的时候,一支由cs科学家组成的考察队赶到了出事地点。经过一番侦察,科学家们发现陨石上刻有若干行密文,每一行都包含5个整数: 1 1 1 1 6 0 0 6 3 57 8 0 11 3 284...
点击打开链接 //求SUM(gcd(i,n), 1<=i<=n) /*g(n)=gcd(i,n),根据积性定义g(mn)=g(m)*g(n)(gcd(m,n)==1)所以gcd(i,n)是积性的,所以f(n)=sum(gcd(i,n))是积性的,f(n)=f(p1^a1*p2^a2*...*pn^an)=f(p1^a1)*f(p...