第一题:树的子结构
- 题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 算法思路,首先我们需要前序遍历出我们的二叉树A和B,然后把遍历出来的值转化成字符串,如果B的字符串属于A的字串,那么我们可以返回True,否则则为False。所以我们需要写两个函数。
- 算法代码如下:
class Solution:
def strTree(self,root):
if not root:
return ""
re = ""
if root.left or root.right:
re = re + self.strTree(root.left)+self.strTree(root.right)
return re
def HasubTree(self,pRoot1,pRoot2):
if not pRoot2:
return False
str1 = self.strTree(pRoot1)
str2 = self.strTree(pRoot2)
if str(str2) in str(str1):
return True
else:
return False
第二题:二叉树的镜像
- 题目:操作给定的二叉树,将其变换为源二叉树的镜像。
二叉树的镜像定义:源二叉树
- 算法思路:这里我们需要用到递归,我们将左右子结点互换,然后分别递归二叉树的左右子树。
- 算法代码如下:
class Solution:
def Mirror(self,root):
if root:
node = root.left
root.left = root.right
root.right = node
self.Mirror(root.left)
self.Mirror(root.right)
return root
else:
return None
第三题:顺时针打印矩阵
- 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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。
- 算法思路:首先我们创建一个空List,我们对输入的矩阵开始进行顺时针循环,首先从第一行第一个值开始,从左往右取值,通过pop()取值,并且原本的矩阵会删掉且存入List中,接着从第一行最后一个值从上往下取值,再从最后一行的最后一个值从右往左取值,最后从最后一行的第一个值往上取值,依此四种情形而循环最终取完所有的值。
- 算法代码如下:
class Solution:
def printMatrix(self,matrix):
res = []
while matrix:
res+=matrix.pop(0)
if matrix and matrix[0]:
for row in matrix:
res.append(row.pop())
if matrix:
res+=matrix.pop()[::-1]
if matrix and matrix[0]:
for row in matrix[::-1]:
res.append(row.pop(0))
return res