树的前序,中序,后序遍历概念理解与代码实现
2018-03-22 15:42
134 查看
概念理解
对于二叉树,树的遍历有三种:先序遍历,中序遍历,后序遍历。
先序遍历:根节点->左孩子->右孩子
中序遍历:左孩子->根节点->右孩子
后序遍历:左孩子->右孩子->根节点
图1 树图
按照上述遍历概念知:
先序遍历:- + a * b - c d / e f
中序遍历:a + b * c - d - e / f
后序遍历:a b c d - * + e f / -
python代码实现#构造二叉树节点
class BinaryTreeNode(object):
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
#构造二叉树
class BinaryTree(object):
def __init__(self, root=None):
self.root = root
#判断是否为空
def is_empty(self):
return self.root == None
#先序遍历
def preOrder(self,BinaryTreeNode):
if BinaryTreeNode == None:
return
# 先打印根结点,再打印左结点,后打印右结点
print(BinaryTreeNode.data)
self.preOrder(BinaryTreeNode.left)
self.preOrder(BinaryTreeNode.right)
#中序遍历
def inOrder(self,BinaryTreeNode):
if BinaryTreeNode == None:
return
# 先打印左结点,再打印根结点,后打印右结点
self.inOrder(BinaryTreeNode.left)
print(BinaryTreeNode.data)
self.inOrder(BinaryTreeNode.right)
#后序遍历
def postOrder(self,BinaryTreeNode):
if BinaryTreeNode == None:
return
# 先打印左结点,再打印右结点,后打印根结点
self.postOrder(BinaryTreeNode.left)
self.postOrder(BinaryTreeNode.right)
print(BinaryTreeNode.data)
#构造树
n1 = BinaryTreeNode(data="D")
n2 = BinaryTreeNode(data="E")
n3 = BinaryTreeNode(data="F")
n4 = BinaryTreeNode(data="B", left=n1, right=n2)
n5 = BinaryTreeNode(data="C", left=n3, right=None)
root = BinaryTreeNode(data="A", left=n4, right=n5)
#实例化树
bt = BinaryTree(root)
print('先序遍历')
bt.preOrder(bt.root)
print('中序遍历')
bt.inOrder(bt.root)
print('后序遍历')
bt.postOrder(bt.root)
对于二叉树,树的遍历有三种:先序遍历,中序遍历,后序遍历。
先序遍历:根节点->左孩子->右孩子
中序遍历:左孩子->根节点->右孩子
后序遍历:左孩子->右孩子->根节点
图1 树图
按照上述遍历概念知:
先序遍历:- + a * b - c d / e f
中序遍历:a + b * c - d - e / f
后序遍历:a b c d - * + e f / -
python代码实现#构造二叉树节点
class BinaryTreeNode(object):
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
#构造二叉树
class BinaryTree(object):
def __init__(self, root=None):
self.root = root
#判断是否为空
def is_empty(self):
return self.root == None
#先序遍历
def preOrder(self,BinaryTreeNode):
if BinaryTreeNode == None:
return
# 先打印根结点,再打印左结点,后打印右结点
print(BinaryTreeNode.data)
self.preOrder(BinaryTreeNode.left)
self.preOrder(BinaryTreeNode.right)
#中序遍历
def inOrder(self,BinaryTreeNode):
if BinaryTreeNode == None:
return
# 先打印左结点,再打印根结点,后打印右结点
self.inOrder(BinaryTreeNode.left)
print(BinaryTreeNode.data)
self.inOrder(BinaryTreeNode.right)
#后序遍历
def postOrder(self,BinaryTreeNode):
if BinaryTreeNode == None:
return
# 先打印左结点,再打印右结点,后打印根结点
self.postOrder(BinaryTreeNode.left)
self.postOrder(BinaryTreeNode.right)
print(BinaryTreeNode.data)
#构造树
n1 = BinaryTreeNode(data="D")
n2 = BinaryTreeNode(data="E")
n3 = BinaryTreeNode(data="F")
n4 = BinaryTreeNode(data="B", left=n1, right=n2)
n5 = BinaryTreeNode(data="C", left=n3, right=None)
root = BinaryTreeNode(data="A", left=n4, right=n5)
#实例化树
bt = BinaryTree(root)
print('先序遍历')
bt.preOrder(bt.root)
print('中序遍历')
bt.inOrder(bt.root)
print('后序遍历')
bt.postOrder(bt.root)
相关文章推荐
- 二叉树前序、中序、后序遍历相互求法及有关代码实现
- 面试:递归和非递归方式实现先序、中序、后序遍历代码
- 2015-03-15---二叉树递归(非递归)实现先序、中序、后序遍历(附代码)
- 二叉树先序、中序、后序遍历的非递归实现,纯c代码
- 数据结构树的前序、中序、后序遍历,树叶数量,左右子树交换实现代码
- 用递归方式实现二叉树先序、中序、后序遍历
- 二叉树的遍历方法之层序-先序-中序-后序遍历的简单讲解和代码示例
- 二叉树先序,中序,后序遍历非递归实现
- Java实现二叉树的递归构建及先序、中序、后序、层序遍历(递归和循环)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 【基础备忘】二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的遍历问题-----Java实现(中序、前序、后序、遍历)
- C++实现链式二叉树,采用非递归的方式先序,中序,后序遍历二叉树
- 二叉树先序、中序,后序遍历的非递归实现
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- java 实现排序二叉树的插入和前序,中序,后序遍历
- python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)
- 前序 中序 后序 遍历 递归 非递归算法 java实现
- 二叉树的遍历方法之层序-先序-中序-后序遍历的简单讲解和代码示例