标题: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
));
}
}
转载请注明原文地址: https://lol.8miu.com/read-36561.html