5.1.9 Symmetric Tree

来源:互联网 发布:网络管理软件应用总结 编辑:程序博客网 时间:2024/05/21 17:51

原题链接:https://oj.leetcode.com/problems/symmetric-tree/

这题实际上可以看作上一题 Same Tree的变形,即判断一棵树的左右子树是否是Same Tree.

方法I: 递归:简单,一次过。

public class Solution {    public boolean isSymmetric(TreeNode root) {        if(root == null) return true;        TreeNode p = root.left;        TreeNode q = root.right;        return isSame(p, q);    }        private boolean isSame(TreeNode p, TreeNode q){        if(p == null && q == null) return true;        if(p == null || q == null) return false;        return (p.val == q.val) && isSame(p.left, q.right) && isSame(p.right, q.left);    }}

方法II: 迭代。

public class Solution {    public boolean isSymmetric(TreeNode root) {        if(root == null) return true;        Stack<TreeNode> s = new Stack<TreeNode>();        TreeNode p = root.left;        TreeNode q = root.right;        s.push(p);        s.push(q);        while(!s.isEmpty()){            p = s.pop();            q = s.pop();            if(p == null && q == null) continue;            if(p == null || q == null) return false;            if(p.val != q.val) return false;            s.add(p.left);            s.add(q.right);            s.add(p.right);            s.add(q.left);        }        return true;    }    }


0 0