1.按之字形顺序打印二叉树
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/afdb4dbb982d7b60a6953967e58b1e37.png)
class Solution:
def Print(self , pRoot: TreeNode) -> List[List[int]]:
if not pRoot:
return []
nodestack = [pRoot]
result = []
while nodestack:
res = []
nextstack = []
for i in nodestack:
res.append(i.val)
if i.left:
nextstack.append(i.left)
if i.right:
nextstack.append(i.right)
nodestack = nextstack
result.append(res)
returnRes = []
for idx,v in enumerate(result):
if idx%2==0:
returnRes.append(v)
else:
returnRes.append(v[::-1])
return returnRes
2.二叉搜索树的第k个节点
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0f2aa33d22a8ee92ade00807ccaa1913.png)
class Solution:
def KthNode(self , proot: TreeNode, k: int) -> int:
if not proot:
return -1
numbers = []
stack = [proot]
while stack:
temp = stack[0]
numbers.append(temp.val)
stack = stack[1:]
if temp.left:
stack.append(temp.left)
if temp.right:
stack.append(temp.right)
numbers = sorted(numbers)
if k > len(numbers) or k < 1:
return -1
return numbers[k-1]
3.重建二叉树
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/317c56d22bdacc741d6042266a680c19.png)
class Solution:
def reConstructBinaryTree(self , pre: List[int], vin: List[int]) -> TreeNode:
if not pre:
return None
root = TreeNode(pre[0])
tmp = vin.index(pre[0])
root.left = self.reConstructBinaryTree(pre[1:tmp+1],vin[:tmp])
root.right = self.reConstructBinaryTree(pre[tmp+1:], vin[tmp+1:])
return root
4. 树的子结构
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9a7990c65fafe8356dbe53e485081322.png)
class Solution:
def HasSubtree(self , pRoot1: TreeNode, pRoot2: TreeNode) -> bool:
if not pRoot1 or not pRoot2:
return False
def bijiao(A,B):
if not B:
return True
elif not A:
return False
elif A.val != B.val:
return False
return bijiao(A.left,B.left) and bijiao(A.right,B.right)
return bijiao(pRoot1,pRoot2) or self.HasSubtree(pRoot1.left,pRoot2) or self.HasSubtree(pRoot1.right,pRoot2)