017-101-Symmetric Tree 判断树是否对称
2017-11-26 13:18
357 查看
Question
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1 / \ 2 2 / \ / \ 3 4 4 3 But the following [1,2,2,null,3,null,3] is not: 1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
Solution
通过观察,树的镜像是指每个节点的左右子树互换,先遍历右子树,并交换每个节点的左右子树,然后判断左右子树是否相等参考 007-100-判断两个二叉树是否相等 Same Tree/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ void switchNode(struct TreeNode* root){ if(root != NULL){ struct TreeNode* tmp = root->left; root->left = root->right; root->right = tmp; switchNode(root->left); switchNode(root->right); } } bool isSameTree(struct TreeNode* p, struct TreeNode* q) { if(p == NULL || q == NULL){ return (p == q); }else{ if(p->val != q->val){ return false; }else{ return isSameTree(p->left, q->left)&&isSameTree(p->right, q->right); } } } bool isSymmetric(struct TreeNode* root) { if(root != NULL){ switchNode(root->right); return isSameTree(root->left, root->right); } return true; }
时间效率是O(n), 这个解法唯一不好的就是改变了输入的结构。
相关文章推荐
- 101. Symmetric Tree (判断二叉树是否对称)
- LeetCode-101-Symmetric Tree(判断是否为对称树)
- Leetcode 101 Symmetric Tree 判断一棵树是否对称
- Leetcode 101. Symmetric Tree 判断二叉树是否对称,注意写在两个方法中,递归时注意空的判断
- [LeetCode] Symmetric Tree 判断二叉树是否为对称二叉树
- Leetcode#101. Symmetric Tree(对称树)
- LeetCode(Symmetric Tree)判断二叉树是否是对称的
- Symmetric Tree 判断一棵树是否对称
- 【二叉树是否对称】Symmetric Tree
- 剑指offer-判断树是否对称
- 【LeetCode-面试算法经典-Java实现】【101-Symmetric Tree(对称树)】
- 判断二叉树是否是水平对称的 Symmetric Tree
- LeetCode 101. Symmetric Tree(对称的树)
- 【LeetCode101-110】二叉树对称及存储,前序中序遍历生成二叉树,中序后序生成二叉树,数组转化为AVL平衡树,判断二叉树是否平衡
- Leetcode-Symmetric Tree——判断二叉树是否对称
- LeetCode 101 Symmetric Tree(对称树)(*)
- 【101-Symmetric Tree(对称树)】
- [LeetCode] Symmetric Tree 判断二叉树是否为对称二叉树
- 二叉树系列 - [LeetCode] Symmetric Tree 判断二叉树是否对称,递归和非递归实现
- 【遍历二叉树】09判断二叉树是否关于自己镜像对称【Symmetric Tree】