树状图

核心代码
class Node:
def __init__(self, x, left=None, right=None):
self.val = x
self.left = left
self.right = right
class PreDfs(object):
"""
根节点——左子节点——右子节点
"""
def __init__(self, root: Node):
self.root = root
def re_fun(self):
res = []
def _fn(node: Node):
if not node:
return None
res.append(node.val)
_fn(node.left)
_fn(node.right)
_fn(self.root)
return res
def traverse_fun(self):
if not self.root:
return []
res, stack = [], [self.root]
while stack:
node = stack.pop()
node.right and stack.append(node.right)
node.left and stack.append(node.left)
res.append(node.val)
return res
class MidDfs(object):
"""
左子树->根节点->右子树
"""
def __init__(self, root: Node):
self.root = root
def re_fun(self):
res = []
def _fn(node: Node):
if not node:
return None
_fn(node.left)
res.append(node.val)
_fn(node.right)
_fn(self.root)
return res
def traverse_fun(self):
if not self.root:
return []
res, stack = [], []
p_node = self.root
while p_node or len(stack) > 0:
if p_node:
stack.append(p_node)
p_node = p_node.left
else:
p_node = stack.pop()
res.append(p_node.val)
p_node = p_node.right
return res
class BackDfs(object):
"""
左子树->右子树->根节点
"""
def __init__(self, root: Node):
self.root = root
def re_func(self):
res = []
def _fn(node: Node):
if not node:
return None
_fn(node.left)
_fn(node.right)
res.append(node.val)
_fn(self.root)
return res
def traverse_fun(self):
stack, res = [], []
while stack or self.root:
while self.root:
stack.append(self.root)
if self.root.left:
self.root = self.root.left
else:
self.root = self.root.right
n = stack.pop()
res.append(n.val)
if stack and n == stack[-1].left:
self.root = stack[-1].right
else:
self.root = None
return res
if __name__ == '__main__':
r = Node(1, Node(2, Node(4), Node(5)), Node(3, Node(6), Node(7)))
pd = PreDfs(r)
print(pd.traverse_fun())
print(pd.re_fun())
md = MidDfs(r)
print(md.re_fun())
print(md.traverse_fun())
bd = BackDfs(r)
print(bd.re_func())
print(bd.traverse_fun())