二叉树的遍历,分为深度优先遍历,以及广度优先遍历。
在深度优先遍历中,具体分为如下三种:
针对上图二叉树,三种遍历结果为:
实现代码如下:
# 定义二叉树节点 class TreeNode(object): def __init__(self,val,left=None,right=None): self.val=val self.left=left self.right=right #定义二叉树类 class BinaryTree(object): def __init__(self,root=None): self.root=root def preOrder(self,retList=[],node=‘root‘): if node!=None: retList.append(node) self.preOrder(retList,node.left) # 递归调用,将左子节点放到列表里 self.preOrder(retList,node.right) # 递归调用,将右节点放到列表里 return retList def inOrder(self,retList=[],node=‘root‘): if node!=None: self.inOrder(retList,node.left) retList.append(node) self.inOrder(retList,node.right) return retList def postOrder(self,retList=[],node=‘root‘): if node!=None: self.postOrder(retList,node.left) self.postOrder(retList,node.right) retList.append(node) return retList if __name__==‘__main__‘: rootNode=TreeNode(50) rootNode.left = TreeNode(20,left=TreeNode(15),right=TreeNode(30)) rootNode.right = TreeNode(60,right=TreeNode(70)) binaryTree=BinaryTree(rootNode) ret = binaryTree.preOrder([],binaryTree.root) for i in ret: print(i.val,end=‘.‘) print(‘\n‘+‘-‘*20) ret = binaryTree.inOrder([],binaryTree.root) for i in ret: print(i.val,end=‘.‘) print(‘\n‘+‘-‘*20) ret = binaryTree.postOrder([],binaryTree.root) for i in ret: print(i.val,end=‘.‘)
原文:https://www.cnblogs.com/lilip/p/10397212.html