标题:Java求解对称二叉树
public class TestSymmetricBinaryTree03 {
public boolean symmetricBinaryTree(TreeNode p) {
if(p == null) {
return true;
}
return symmetricBinaryTree02(p.left, p.right);
}
public boolean symmetricBinaryTree02(TreeNode p1, TreeNode p2) {
if(p1 == null && p2 == null) {
return true;
}else if(p1 == null || p2 == null) {
return false;
}else {
if(p1.val != p2.val) {
return false;
}
boolean res1 = symmetricBinaryTree02(p1.right, p2.left);
boolean res2 = symmetricBinaryTree02(p1.left, p2.right);
return res1 && res2;
}
}
public boolean symmetricBinaryTree03(TreeNode p) {
if(p == null) {
return true;
}
if(p.left == null && p.right == null) {
return true;
}else if(p.left == null || p.right == null) {
return true;
}
Deque<TreeNode> s1 = new LinkedList<TreeNode>();
Deque<TreeNode> s2 = new LinkedList<TreeNode>();
s1.push(p.left);
s2.push(p.right);
while(!s2.isEmpty() && !s2.isEmpty()) {
TreeNode node1 = s1.pop();
TreeNode node2 = s2.pop();
if(node1 == null && node2 == null) {
continue;
}else if(node1 == null || node2 == null) {
return false;
}
if(node1.val != node2.val) {
return false;
}
s1.push(node1.left);
s1.push(node1.right);
s2.push(node2.right);
s2.push(node2.left);
}
if(s1.isEmpty() && s2.isEmpty()) {
return true;
}
return false;
}
public TreeNode initTree(Integer[] a) {
if(a == null || a.length == 0) {
return null;
}
int t = 0;
TreeNode p = new TreeNode(a[t]);
Queue<TreeNode> q = new LinkedList<>();
q.offer(p);
while(!q.isEmpty()) {
TreeNode node = q.poll();
if(t + 1 == a.length) {
return p;
}else {
t++;
if(a[t] == null) {
node.left = null;
}else {
node.left = new TreeNode(a[t]);
q.offer(node.left);
}
}
if(t + 1 == a.length) {
return p;
}else {
t++;
if(a[t] != null){
node.right = new TreeNode(a[t]);
q.offer(node.right);
}
}
}
return p;
}
@Test
public void test() {
Integer[] a = new Integer[] {5, 3, 1, null, 1, null, 3, 2, null, 2, null};
TreeNode p = this.initTree(a);
System.out.println("使用递归");
System.out.println("istrue:" + this.symmetricBinaryTree(p));
System.out.println("使用迭代进行求解");
System.out.println("isTrue:" + this.symmetricBinaryTree03(p));
}
}