二叉树建立及其前序、中序、后序和层序遍历
class Treenode():
def __init__(self, value, left=None, right=None) -> None:
self.val=value
self.left=left
self.right=right
class Tree():
def __init__(self, root=None) -> None:
self.root=root
def create_tree(self, arr):
length=len(arr)
if length==0:
return
for i in range(length):
arr[i]=Treenode(arr[i])
for i in range(length):
if 2*i+1<length:
arr[i].left=arr[2*i+1]
if 2*i+2<length:
arr[i].right=arr[2*i+2]
self.root=arr[0]
def build_tree(self, arr):
if not arr:
return
root=Treenode(arr.pop(0))
stack=[root]
while stack:
length=len(stack)
while length>0:
curr=stack.pop(0)
if arr:
tmp=arr.pop(0)
if tmp:
curr.left=Treenode(tmp)
stack.append(curr.left)
if arr:
tmp=arr.pop(0)
if tmp:
curr.right=Treenode(tmp)
stack.append(curr.right)
length-=1
self.root=root
def preorder(root):
curr=root
if curr:
print(curr.val)
preorder(curr.left)
preorder(curr.right)
def medorder(root):
curr=root
if curr:
medorder(curr.left)
print(curr.val)
medorder(curr.right)
def postorder(root):
curr=root
if curr:
postorder(curr.left)
postorder(curr.right)
print(curr.val)
def levelorder(root):
if root:
print(root.val)
stack=[root]
else:
return
while stack:
length=len(stack)
while length>0:
curr=stack.pop(0)
if curr.left:
print(curr.left.val)
stack.append(curr.left)
if curr.right:
print(curr.right.val)
stack.append(curr.right)
length-=1
x=[6,2,4,3,1,5]
y=Tree()
y.build_tree(x)
preorder(y.root)
medorder(y.root)
postorder(y.root)
levelorder(y.root)