Symmetric Tree
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree[1,2,2,3,4,4,3]is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3But the following[1,2,2,null,3,null,3]is not:
1
/ \
2 2
\ \
3 3Note: Bonus points if you could solve it both recursively and iteratively.
递归:
判断左右两颗子树是否对称,只要两颗子树的根节点值相同,并且左边子树的左子树和右边子树饿右子树对称 且 左边子树的右子树和右边子树的左子树对称
一开始先检查 input,如果 null 也是 symmetric,然后我们进入 recursive help function。
先看两个 node 是不是都是 null,如果都是 null 那么也是对称的。如果只有其中一个是 null 那么很明显这个数就是不对称的。
如果两个都不是 null 并且值相等,那么我们就 recursive 继续往下走。
复杂度分析:时间 O(n) 空间 O(1)
DFS
用两个栈,左栈保存根节点的左孩子,右栈保存根节点的右孩子,每次从两个栈中取出一个值,然后比较,如果相同则把从左栈中取出的节点的左孩子和右孩子放进左栈;相对的,把右栈中取出的节点的右孩子和左孩子放进右栈。要注意的是左栈取出的节点放孩子的顺序是先左后右,右栈则是先右后左。
Last updated
Was this helpful?