题目
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
解题思路
- 定义一个对称的前序遍历,即
root -> right -> left
与普通的前序遍历进行对比 - 相同则认为树是对称的
boolean isSymmetrical(TreeNode pRoot) {
LinkedList<Integer> scanner = new LinkedList<>();
LinkedList<Integer> symmetricalScanner = new LinkedList<>();
preScanner(scanner, pRoot);
symmetricalPreScanner(symmetricalScanner, pRoot);
return scanner.equals(symmetricalScanner);
}
/**
* 普通的前序遍历
* @param res
* @param root
*/
private void preScanner(LinkedList<Integer> res, TreeNode root) {
if (root == null) {
res.addLast(null);
return;
}
res.addLast(root.val);
preScanner(res, root.left);
preScanner(res, root.right);
}
/**
* 先右再左的前序遍历
* @param res
* @param root
*/
private void symmetricalPreScanner(LinkedList<Integer> res, TreeNode root) {
if (root == null) {
res.addLast(null);
return;
}
res.addLast(root.val);
symmetricalPreScanner(res, root.right);
symmetricalPreScanner(res, root.left);
}