判断是否是相同二叉树&&判断是否是对称树
来源:互联网 发布:五金淘宝店铺表示 编辑:程序博客网 时间:2024/06/15 15:01
LeetCode 100. Same Tree
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { if (p == NULL && q == NULL) return true; if (p == NULL || q == NULL) return false; if (p->val == q->val) { return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); } return false; }};
写递归先写最底层,将最底层情况写出,然后再根据逻辑,写出上层到底层的传递方式。----------------------------------------------------------------------------------------------------------------------------------------------------------
Leetcode 101. Symmetric Tree
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.
提示给出可以用递归和非递归两种方式,先用递归写。
class Solution {public: bool isSymmetric(TreeNode* root) { // TreeNode *cur = root; if (root == NULL) return true; return isMirror(root->left, root->right); } bool isMirror(TreeNode *p, TreeNode *q) { if (q == NULL && p == NULL) return true; if (p == NULL || q == NULL) return false; if (p->val == q->val) return isMirror(p->right, q->left) && isMirror(p->left, q->right); return false; }};
在写递归过程中,由于必须分叉,因此增加了一个带2参数的函数来辅助判断。
对于非递归,将二叉树分成两半,则此时思路就是对于左半部分按照从左向右层序遍历;对于右半部分从右向左进行层序遍历。层序遍历采用队列结构,因此构造两个队列。
/** * 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) { TreeNode *lchild; TreeNode *rchild; queue<TreeNode *>p, q; if (root == NULL) { return true; } p.push(root->left); q.push(root->right); while (!p.empty() && !q.empty()) { lchild = p.front(); p.pop(); rchild = q.front(); q.pop(); if (lchild == NULL && rchild == NULL) continue; if (lchild == NULL || rchild == NULL) return false; if (lchild->val != rchild->val) return false; p.push(lchild->left); p.push(lchild->right); q.push(rchild->right); q.push(rchild->left); } return true; }};
需要注意的是continue的使用,因为此时队列尚不为空,因此并不能直接return,需要继续判断直到队列为空。
- 判断是否是相同二叉树&&判断是否是对称树
- 判断二叉树是否相同,对称
- 判断二叉树是否是水平对称的 Symmetric Tree
- LeetCode(Symmetric Tree)判断二叉树是否是对称的
- 如何判断二叉树是否是结构性对称的?
- 剑指offer题解 判断是否是对称的二叉树
- 【剑指offer】判断是否是对称的二叉树
- 判断二叉树是否对称
- 判断二叉树是否对称
- 判断二叉树是否对称
- 判断二叉树是否对称
- 判断二叉树是否对称
- 判断二叉树是否对称
- 判断是否是子树 和 判断二叉树是否平衡
- js判断是否二叉树是否对称
- 判断是否是对称数
- 判断二叉树是否是平衡树
- 判断二叉树是否是平衡树
- sys.stdout.flush()
- iOS开发 CGContextRef画图使用
- 第一个Java程序,输出“HelloWorld”。
- Iterator之remove情况分析之一报错原因
- 视频内容谁来保护?阿里云视频加密技术大揭秘,打造云上视频安全体系
- 判断是否是相同二叉树&&判断是否是对称树
- What is JSON Wire Protocol?
- xutils3图片加载详解
- 安装ffmpeg
- 广州本爱信息科技有限公司是骗子吗?真相揭秘
- 9. Palindrome Number(回文数字 eg:12321) —— Java
- UI控件之UISlider简单图片放大与缩小的应用
- jQuery邮箱验证正则表达式
- TestNG 监听器扩展插件 NetEase Arrow