题目17:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
if not pRoot2 or not pRoot1:
return None
else:
return self.is_subtree(pRoot1, pRoot2) or self.is_subtree(pRoot1.left, pRoot2) or self.is_subtree(pRoot1.right, pRoot2)
def is_subtree(self, A, B):
if not B:
return True
if not A or A.val is not B.val:
return False
return self.is_subtree(A.left,B.left) and self.is_subtree(A.right, B.right)
题目18:
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回镜像树的根节点
def Mirror(self, root):
if not root:
return None
else:
root.left, root.right = root.right, root.left
self.Mirror(root.left)
self.Mirror(root.right)
题目19:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
if not matrix:
return None
# 矩阵的行
line = len(matrix)
# 矩阵的列
column = len(matrix[0])
# 顺时针打印的列表
result = []
# 设置游标
pre = 0
while line > pre*2 and column > pre*2:
endx = line - 1 - pre
endy = column - 1 - pre
for i in range(pre, endy+1):
result.append(matrix[pre][i])
if pre < endx:
for i in range(pre+1, endx+1):
result.append(matrix[i][endy])
if pre < endx and pre < endy:
for i in range(endy-1, pre-1, -1):
result.append(matrix[endx][i])
if pre < endx-1 and pre < endy:
for i in range(endx-1, pre, -1):
result.append(matrix[i][pre])
pre += 1
return result