1. 题目
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
1 2
| 输入:root = [1,2,2,3,4,4,3] 输出:true
|
示例 2:
1 2
| 输入:root = [1,2,2,null,3,null,3] 输出:false
|
提示:
- 树中节点数目在范围
[1, 1000]
内
-100 <= Node.val <= 100
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
2. 思路
- 已知题目要求判断两个二叉树是否完全对称
- 根据三种遍历二叉树的方式进行比对得知:对称二叉树的前序遍历 和 后序遍历得到的序列翻转后一致,因此可从这一点进行入手
- 收集二叉树前序遍历的结果 与 二叉树后序遍历的逆序结果进行比对,即可确认是否为对称二叉树
3. 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
class Solution { private static final Integer NULL_VAL = 101;
public boolean isSymmetric(TreeNode root) { var preorderList = preorder(root, new ArrayList<Integer>()); var postorderList = postorder(root, new ArrayList<Integer>());
for (int i = 0, j = postorderList.size() - 1; i < preorderList.size(); ++i, --j) { if (preorderList.get(i) != postorderList.get(j)) { return false; } }
return true; }
private List<Integer> preorder(TreeNode root, List<Integer> list) { if (root == null) { list.add(NULL_VAL); return list; }
list.add(root.val); preorder(root.left, list); preorder(root.right, list);
return list; }
private List<Integer> postorder(TreeNode root, List<Integer> list) { if (root == null) { list.add(NULL_VAL); return list; }
postorder(root.left, list); postorder(root.right, list); list.add(root.val);
return list; } }
|
4. 复杂度
Author:
zchengb
License:
Copyright (c) 2019-2024 zchengb