剑指offer(58)对称的二叉树

package java_jianzhioffer_algorithm;
/**
 * 题目:请实现一个函数,用来判断一颗二叉树是不是对称的。
 * 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
 * @author hexiaoli
 * 思考:
 *   递归实现:
 *   比较当前节点的左右节点,如果有一个为空则不对称,
 *   如果均不为空则比较值是否相同,相同则对称
 *   
 */
class TreeNodeis {
	int val = 0;
	TreeNodeis left = null;
	TreeNodeis right = null;
	public TreeNodeis(int val) {
		this.val = val;
	}
}
public class IsSymmetrical {
	public static boolean isSymmetrical(TreeNodeis pRoot) {
		//如果 根为空则返回
        if(pRoot == null){
            return true;
        }
        //否则判断根的左右子树是否相等   
        return isSymmetrical(pRoot.left,pRoot.right);		
	}
	public static boolean isSymmetrical(TreeNodeis tleft,TreeNodeis tright) {
		// 如果左子树为空,判断右子树是否为空			
		if(tleft == null) {
			return tright == null;
		}
		// 如果左子树不为空,右子树为空,则不对称
		if(tright == null) {
			return false;
		}
		// 左右子结点值不同,则不对称
		if(tleft.val != tright.val) {
			return false;
		}
        // 比较左子树的右结点和右子树的左结点
        // 比较左子树的左结点和右子树的右结点
		return isSymmetrical(tleft.right, tright.left) && isSymmetrical(tleft.left, tright.right);		
	}

	public static void main(String[] args) {
		TreeNodeis head = new TreeNodeis(8);
		TreeNodeis h1 = new TreeNodeis(6);
		TreeNodeis h2 = new TreeNodeis(6);
		TreeNodeis h3 = new TreeNodeis(5);
		TreeNodeis h4 = new TreeNodeis(7);
		TreeNodeis h5 = new TreeNodeis(7);
		TreeNodeis h6 = new TreeNodeis(5);
		head.left = h1;
		head.right = h2;
		h1.left = h3;
		h1.right = h4;
		h2.left = h5;
		h2.right = h6;
		Boolean result;
		result=isSymmetrical(head);
		System.out.println(result);
	}

}

猜你喜欢

转载自blog.csdn.net/hxl0925/article/details/89958676