import java.util.Stack;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
// 定义一个队列,用于存放节点
LinkedList<Integer> queue = new LinkedList<>();
// 系统定义的函数
boolean isSymmetrical(TreeNode pRoot) {
if (null == pRoot || (null == pRoot.left && null == pRoot.right)) {
return true;
}
if ((null == pRoot.left && null != pRoot.right) || (null != pRoot.left && null == pRoot.right)) {
return false;
}
if (pRoot.left.val != pRoot.right.val) {
return false;
}
// 调用自定义的函数,得到中序遍历的队列
process(pRoot);
// 定义一个辅助栈
Stack<Integer> stack = new Stack<>();
// 定义一个整型变量,用于存放 queue 的长度
int ql = queue.size();
// 将队列的前半部分压入栈中
for (int i = 0; i < (ql / 2); i++) {
stack.push(queue.poll());
}
// 将根节点从队列的头部移除
queue.poll();
while (!stack.isEmpty() && !queue.isEmpty()) {
if (queue.poll() != stack.pop()) {
return false;
}
}
return true;
}
// 中序遍历的递归实现
public void process(TreeNode root) {
if (null == root) {
return;
}
process(root.left);
queue.add(root.val);
process(root.right);
}
}