101. Symmetric Tree
题目如下:
由于对树相关的程序题比较少接触,这一题是直接参考别人答案的,链接如下:
https://blog.csdn.net/crazy1235/article/details/51541984
参考了里头双端队列的实现方法,主要思路是定义两个分别遍历root节点左右子树的节点preNode以及postNode,其中postNode访问preNode的镜面位置,如果值相同就分别节点下的子节点也按镜面的方式分别压进去双端队列的两端,如果不相等,就说明不是对称树。
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public boolean isSymmetric(TreeNode root) { 12 if(root == null){ 13 return true; 14 } 15 16 Deque<TreeNode> deque = new LinkedList<TreeNode>(); 17 deque.addFirst(root.left); 18 deque.addLast(root.right); 19 20 TreeNode preNode = null; 21 TreeNode postNode = null; 22 23 while(!deque.isEmpty()){ 24 preNode = deque.pollFirst(); 25 postNode = deque.pollLast(); 26 27 if(preNode == null && postNode == null){ 28 continue; 29 } 30 31 if(preNode == null || postNode == null){ 32 return false; 33 } 34 35 if(preNode.val != postNode.val ){ 36 return false; 37 }else{ 38 deque.addFirst(preNode.right); 39 deque.addFirst(preNode.left); 40 41 deque.addLast(postNode.left); 42 deque.addLast(postNode.right); 43 } 44 } 45 46 return true; 47 } 48 }
END