您的位置:首页 > 其它

leedcode做题总结,题目Symmetric Tree 2012/09/23

2014-07-12 23:32 302 查看
判断二叉树是否对称,用递归和非递归实现:

递归可以从节点朝两个方向同时访问比对

public static boolean isS(TreeNode r1,TreeNode r2){
if(r1==null&&r2==null) return true;
if(r1!=null&&r2!=null){
return isS(r1.left,r2.right)&&isS(r1.right,r2.left)&&r1.val==r2.val;
}
else{
return false;
}

}
public static boolean isSymmetric(TreeNode root) {
if(root==null) return true;
return isS(root.left,root.right);
}


非递归思路也一样,从节点像两个方向同时访问比对,因为对用栈非递归历遍树的代码不是很熟悉,中间改了几次错误,代码比较乱。

public boolean isSymmetric(TreeNode root) {
if(root==null) return true;
Stack<TreeNode> s1 = new Stack<TreeNode>();
Stack<TreeNode> s2 = new Stack<TreeNode>();
//s1.push(root);
//s2.push(root);
TreeNode root2=root;
while (!(root==null&&root2==null)){
s1.push(root);
if(root2==null)return false;
if(root2.val!=root.val)return false;
s2.push(root2);
root = root.left;
root2 = root2.right;
if(root==null&&!s1.isEmpty()){
while(!s1.isEmpty()&&root==null&&!s2.isEmpty()&&root2==null){
root=s1.pop().right;
root2=s2.pop().left;
}
if(root2!=null&&root==null)return false;
if(root!=null&&root2==null)return false;
if(!s1.isEmpty()&&s2.isEmpty())return false;
if(!s2.isEmpty()&&s1.isEmpty())return false;

}

}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: