拿到这题第一想法是判断中序遍历的结果是否回文,但是被最后几个样例卡了
于是加上null判断又挂了,最后发现需要把null换成当前的层数赋值才过
public void midOrder(TreeNode node, List<Integer> list,int deep){
if (node == null) {
list.add(deep);
return;
}
midOrder(node.left,list,deep+1);
list.add(node.val);
midOrder(node.right,list,deep+1);
}
public boolean isSymmetric(TreeNode root) {
List<Integer> list = new ArrayList<>();
midOrder(root,list,1);
System.out.println(list);
Object[] arr = list.toArray();
int len = arr.length;
for (int i = 0; i < (len-1)/2; i++) {
if (arr[i]!=arr[len-1-i]) return false;
}
return true;
}
}
方法二 看了hxd的博客的得到的想法
对称二叉树 满足左根右和右根左遍历数值相等
只需要同时按照两个顺序遍历不相等就不对称
//对称二叉树 满足左根右和右根左遍历数值相等
public boolean isSymmetric(TreeNode root) {
Stack<TreeNode> leftStack = new Stack<>();
Stack<TreeNode> rightStack = new Stack<>();
TreeNode leftNode = root;
TreeNode rightNode = root;
while (!leftStack.empty()||leftNode!=null){
while (leftNode!=null&&rightNode!=null){
if (leftNode.val != rightNode.val) return false;
leftStack.push(leftNode);
leftNode = leftNode.left;
rightStack.push(rightNode);
rightNode = rightNode.right;
}
if (leftNode != rightNode) return false;//此时若不都为空 就不对称
leftNode = leftStack.pop();
leftNode = leftNode.right;
rightNode = rightStack.pop();
rightNode = rightNode.left;
}
return true;
}