题目来源
面试题28. 对称的二叉树
题目描述
struct TreeNode {
int val;
TreeNode * left;
TreeNode * right;
TreeNode ( ) : val ( 0 ) , left ( nullptr ) , right ( nullptr ) { }
TreeNode ( int x) : val ( x) , left ( nullptr ) , right ( nullptr ) { }
TreeNode ( int x, TreeNode * left, TreeNode * right) : val ( x) , left ( left) , right ( right) { }
} ;
class Solution {
public :
bool isSymmetric ( TreeNode* root) {
}
} ;
题目解析
递归
class Solution {
public boolean isSymmetric ( TreeNode root) {
if ( root == null ) {
return true ;
}
return helper ( root. left, root. right) ;
}
private boolean helper ( TreeNode left, TreeNode right) {
if ( left == null && right == null ) {
return true ;
}
if ( left == null ) {
return false ;
}
if ( right == null ) {
return false ;
}
if ( right. val != left. val) {
return false ;
}
return helper ( left. left, right. right) && helper ( left. right, right. left) ;
}
}
辅助栈
class Solution {
public boolean isSymmetric ( TreeNode root) {
if ( root == null ) {
return true ;
}
Stack < TreeNode > stack = new Stack < > ( ) ;
stack. push ( root. right) ;
stack. push ( root. left) ;
while ( ! stack. empty ( ) ) {
TreeNode left = stack. pop ( ) ;
TreeNode right = stack. pop ( ) ;
if ( left == null && right == null ) {
continue ;
}
if ( left == null ) {
return false ;
}
if ( right == null ) {
return false ;
}
if ( left. val != right. val) {
return false ;
}
stack. push ( left. left) ;
stack. push ( right. right) ;
stack. push ( left. right) ;
stack. push ( right. left) ;
}
return true ;
}
}