Leetcode-Symmetric Tree
来源:互联网 发布:js如何控制embed播放 编辑:程序博客网 时间:2024/06/14 20:40
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 3But the following [1,2,2,null,3,null,3] is not: 1 / \ 2 2 \ \ 3 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: void mirror(TreeNode* root){ if(root==NULL) return; swap(root->left,root->right); mirror(root->left); mirror(root->right); } void preOrder(TreeNode* root,vector<int> &result){ if(root==NULL) return; result.push_back(root->val); preOrder(root->left,result); preOrder(root->right,result); } void inOrder(TreeNode* root,vector<int> &result){ if(root==NULL) return; inOrder(root->left,result); result.push_back(root->val); inOrder(root->right,result); } bool equalVector(vector<int> first, vector<int> second){ if(first.size()!=second.size()) return false; for(int i=0;i<first.size();i++){ if(first[i]!=second[i]) return false; } return true; } bool equalTree(TreeNode* left, TreeNode* right){ vector<int> l_pre,l_in,r_pre,r_in; preOrder(left,l_pre); inOrder(left,l_in); preOrder(right,r_pre); inOrder(right,r_in); return equalVector(l_pre,r_pre)&&equalVector(l_in,r_in); } bool isSymmetric(TreeNode* root) { if(root==NULL) return true; mirror(root->right); return equalTree(root->left,root->right); }};
以上方法虽然通过,但是有bug
bug用例
[1,1]
[1,null,1]
错误在与我判断两棵树是否相同的时候,用了 “两棵树的preorder & inorder 一致的话,则两棵树相等”,实际上有问题的,当节点的值相等,则此法无效。
正确做法如下:
bool isSameTree(TreeNode* p, TreeNode* q) { if(p==NULL && q==NULL) return true; if(p!=NULL && q==NULL) return false; if(p==NULL && q!=NULL) return false; return (p->val==q->val) && isSameTree(p->left,q->left) && isSameTree(p->right,q->right) ; }
0 0
- Leetcode - Tree - Symmetric Tree
- Leetcode - Tree - Symmetric Tree
- LeetCode[Tree]: Symmetric Tree
- [leetcode][tree] Symmetric Tree
- LeetCode: Symmetric Tree
- [Leetcode] Symmetric Tree
- LeetCode : Symmetric Tree
- leetcode 13:symmetric tree
- [LeetCode] Symmetric Tree - Recursively
- [LeetCode] Symmetric Tree - Iteratively
- [LeetCode] Symmetric Tree
- [LeetCode]Symmetric Tree
- Leetcode:Symmetric Tree
- [Leetcode]Symmetric Tree
- Leetcode: Symmetric Tree
- [leetcode]Symmetric Tree
- LeetCode-Symmetric Tree
- [leetcode] Symmetric Tree
- 完成端口封装(修复Windows 网络与通信程序设计 可伸缩IOCP模型的bug)
- POJ 1950暴搜
- Java定时任务的三种实现方法
- 基于UTF8字符串检查错误替换功能
- iOS弹出框封装好的方法
- Leetcode-Symmetric Tree
- 一个简单的基于注解的 Controller (spring 2.5 annotation 方式实现mvc )
- Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……
- 个人网红靠直播卖东西赚钱越来越困难 因为电商平台都杀进来了
- Android常用开源库之Universal-image-loader
- 嵌入式lcd_bmp执行文件时,执行时提示无法找到文件
- Android 自适应的一种布局,weight
- SQL Server 批量插入数据的两种方法
- 利用phpmailer类 发邮件