递归方法:
class treenode(object):
def __init__(self,x):
self.val=x
#左子树
self.left=None
#右子树
self.right=None
def pre(root):
if root==None:
return None
#先序遍历
print(root.val)
pre(root.left)
pre(root.right)
def pre_middle(root):
if root==None:
return None
#中序遍历
pre(root.left)
print(root.val)
pre(root.right)
def pre_last(root):
if root==None:
return None
#后序遍历
pre(root.left)
pre(root.right)
print(root.val)
if __name__ == '__main__':
t1=treenode(1)
t2 = treenode(2)
t3 = treenode(3)
t4 = treenode(4)
t5 = treenode(5)
t6 = treenode(6)
t7 = treenode(7)
t8 = treenode(8)
#设置 t1 的left节点属性 是t2
t1.left=t2
#设置t1的right节点的属性是t3
t1.right=t3
#设置t2的left节点是t4
t2.left=t4
# 设置t2的right节点是t5
t2.right=t5
# 设置t3的left节点是t6
t3.left=t6
# 设置t3的right节点是t7
t3.right=t7
# 设置t6的right节点是t8
t6.right=t8
pre(t1)
pre_middle(t1)
pre_last(t1)
非递归的方法:
class treenode(object):
def __init__(self,x):
self.val=x
#左子树
self.left=None
#右子树
self.right=None
#非递归先序遍历
def pre_no1(root):
if root==None:
return None
stack=[]
tempNode=root
while tempNode or stack:
while tempNode:
print(tempNode.val)
stack.append(tempNode)
tempNode=tempNode.left
node=stack.pop()
tempNode=node.right
#非递归中序遍历
def pre_no2(root):
if root==None:
return None
stack=[]
tempNode=root
while tempNode or stack:
while tempNode:
stack.append(tempNode)
tempNode=tempNode.left
node=stack.pop()
print(node.val)
tempNode=node.right
#非递归后序遍历
def pre_no3(root):
if root==None:
return None
stack=[]
tempNode=root
while tempNode or stack:
while tempNode:
stack.append(tempNode)
tempNode=tempNode.left
node=stack[-1]
tempNode=node.right
if node.right==None:
print(node.val)
node=stack.pop()
while stack and node==stack[-1].right:
node=stack.pop()
print(node.val)
if __name__ == '__main__':
t1=treenode(1)
t2 = treenode(2)
t3 = treenode(3)
t4 = treenode(4)
t5 = treenode(5)
t6 = treenode(6)
t7 = treenode(7)
t8 = treenode(8)
#设置 t1 的left节点属性 是t2
t1.left=t2
#设置t1的right节点的属性是t3
t1.right=t3
#设置t2的left节点是t4
t2.left=t4
# 设置t2的right节点是t5
t2.right=t5
# 设置t3的left节点是t6
t3.left=t6
# 设置t3的right节点是t7
t3.right=t7
# 设置t6的right节点是t8
t6.right=t8
pre_no1(t1)
pre_no2(t1)
pre_no3(t1)