mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Merge pull request #1248 from ChubbyPan/master
更新了文件<ACM模式如何构建二叉树>python3版本
This commit is contained in:
@ -266,7 +266,61 @@ public class Solution {
|
|||||||
|
|
||||||
## Python
|
## Python
|
||||||
|
|
||||||
```Python
|
```Python3
|
||||||
|
class TreeNode:
|
||||||
|
def __init__(self, val = 0, left = None, right = None):
|
||||||
|
self.val = val
|
||||||
|
self.left = left
|
||||||
|
self.right = right
|
||||||
|
|
||||||
|
|
||||||
|
# 根据数组构建二叉树
|
||||||
|
|
||||||
|
def construct_binary_tree(nums: []) -> TreeNode:
|
||||||
|
if not nums:
|
||||||
|
return None
|
||||||
|
# 用于存放构建好的节点
|
||||||
|
root = TreeNode(-1)
|
||||||
|
Tree = []
|
||||||
|
# 将数组元素全部转化为树节点
|
||||||
|
for i in range(len(nums)):
|
||||||
|
if nums[i]!= -1:
|
||||||
|
node = TreeNode(nums[i])
|
||||||
|
else:
|
||||||
|
node = None
|
||||||
|
Tree.append(node)
|
||||||
|
if i == 0:
|
||||||
|
root = node
|
||||||
|
for i in range(len(Tree)):
|
||||||
|
node = Tree[i]
|
||||||
|
if node and (2 * i + 2) < len(Tree):
|
||||||
|
node.left = Tree[i * 2 + 1]
|
||||||
|
node.right = Tree[i * 2 + 2]
|
||||||
|
return root
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 算法:中序遍历二叉树
|
||||||
|
|
||||||
|
class Solution:
|
||||||
|
def __init__(self):
|
||||||
|
self.T = []
|
||||||
|
def inorder(self, root: TreeNode) -> []:
|
||||||
|
if not root:
|
||||||
|
return
|
||||||
|
self.inorder(root.left)
|
||||||
|
self.T.append(root.val)
|
||||||
|
self.inorder(root.right)
|
||||||
|
return self.T
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 验证创建二叉树的有效性,二叉排序树的中序遍历应为顺序排列
|
||||||
|
|
||||||
|
test_tree = [3, 1, 5, -1, 2, 4 ,6]
|
||||||
|
root = construct_binary_tree(test_tree)
|
||||||
|
A = Solution()
|
||||||
|
print(A.inorder(root))
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user