php实现求对称二叉树(先写思路,谋而后动)

php实现求对称二叉树(先写思路,谋而后动

一、总结

1、先写思路,谋而后动

二、php实现求对称二叉树

题目描述:

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

三、代码

代码一:

 1 /*思路:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同   //1、先写思路,谋而后动
 2 * 左子树的右子树和右子树的左子树相同即可,采用递归
 3 * 非递归也可,采用栈或队列存取各级子树根节点
 4 */
 5 public class Solution {
 6     boolean isSymmetrical(TreeNode pRoot)
 7     {
 8         if(pRoot == null){
 9             return true;
10         }
11         return comRoot(pRoot.left, pRoot.right);
12     }
13     private boolean comRoot(TreeNode left, TreeNode right) {
14         // TODO Auto-generated method stub
15         if(left == null) return right==null;
16         if(right == null) return false;
17         if(left.val != right.val) return false;
18         return comRoot(left.right, right.left) && comRoot(left.left, right.right);
19     }
20 }

错误代码:这个代码写的是在对称二叉树的基础上每棵树的左右子树还需要相等

 1 <?php
 2 
 3 /*class TreeNode{
 4     var $val;
 5     var $left = NULL;
 6     var $right = NULL;
 7     function __construct($val){
 8         $this->val = $val;
 9     }
10 }*/
11 function isSymmetrical($pRoot)
12 {
13     if($pRoot==null) return false;
14     if(!$pRoot->left&&!$pRoot->right) return true;
15     if(($pRoot->left&&!$pRoot->right)||(!$pRoot->left&&$pRoot->right)) return false;
16     if($pRoot->left&&$pRoot->right){
17         if($pRoot->left->val==$pRoot->right->val) return isSymmetrical($pRoot->left)&&isSymmetrical($pRoot->right);
18         else return false;
19     }
20     //return false;
21 }
原文地址:https://www.cnblogs.com/Renyi-Fan/p/9068132.html