Leetcode之PHP版题目解析(101. Symmetric Tree)
2019-3-14 星期四 开始吧
今天喜提人生第一台Mac,有点小激动,原谅我这么土.
题目描述
给定一棵二叉树,判断是否是自身的镜像(围绕他的中心是不是对称)
题目示例
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric
1 / \ 2 2 / \ / \ 3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1 / \ 2 2 \ \ 3 3
图一是对称的,图二不是对称的.
题目思路
对于根节点的两个子节点,可以分成多种情况
- 两个子节点都是空,那说明他们是对称的返回true
- 一个子节点为空,另一个子节点不为空,false
- 两个子节点都不为空,但是他们不相等,false,
- 两个子节点不为空且相等,继续判断他们的子节点(暂且称为左子树和右子树吧),把左子树的左子节点和右子树的右子节点进行比较,把左子树的右子节点和右子树的左子节点进行比较.
所以实现的代码是递归的思想.
实现代码
/** * @param TreeNode $root * @return Boolean */ function isSymmetric($root) { if(!$root){ return true; } return $this->check_tree($root->left,$root->right); } function check_tree($x,$y){ if(!$x && !$y){ return true; } if(!$x || !$y || $x->val !== $y->val){ return false; } return $this->check_tree($x->left,$y->right) && $this->check_tree($x->right,$y->left); }
运行结果
leetcode最后运行的时候有时候并不能说明什么,你会发现,有时候一段代码你多次运行耗费的时间是不一样的,所以你不能单从运行结果上来查看代码的效率,还是要通过大0时间复杂度来进行分析,然后调整.
2 Comments
喜提人生第一台Mac 恭喜 这心情和得到心仪已久的姑娘的芳心一样 能够理解 哈哈
哈哈哈原来都是一样的,Mac的美丽无处不在