Skip to content

Commit f5be8a9

Browse files
committed
二叉树相关,数据结构定义,根据数组生成,前序遍历两种方式(递归和非递归)
1 parent 77732c9 commit f5be8a9

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class binaryTreeNode:
2+
3+
def __init__(self,left_child,right_child,value):
4+
self.left_child = left_child
5+
self.right_child = right_child
6+
self.value = value
7+
8+
def get_left_child(self):
9+
return self.left_child
10+
11+
def get_right_node(self):
12+
return self.right_child
13+
14+
def get_value(self):
15+
return self.value
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#coding:utf-8
2+
from binaryTree import binaryTreeNode
3+
4+
def init_tree_from_list(data_list):
5+
6+
num = len(data_list)
7+
node_list = [0 for _ in range(num)]
8+
base_node = binaryTreeNode( None, None,data_list[0])
9+
node_list[0] = base_node
10+
for i in range(1,num):
11+
if data_list[i] == None:
12+
continue
13+
new_node = binaryTreeNode(None, None, data_list[i])
14+
node_list[i] = new_node
15+
# 定位父节点
16+
if i % 2 == 0:
17+
op_node = node_list[i/2 - 1]
18+
op_node.right_child = new_node
19+
else:
20+
op_node = node_list[(i+1)/2 - 1]
21+
op_node.left_child = new_node
22+
23+
24+
return base_node
25+
26+
if __name__ == "__main__":
27+
test_list = range(3)
28+
base_node = init_tree_from_list(test_list)
29+
print base_node.value
30+
print base_node.left_child.value
31+
print base_node.right_child.value
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from binaryTree import binaryTreeNode
2+
from initTree import init_tree_from_list
3+
4+
def preorder_traverse(node,op_func):
5+
op_func(node)
6+
if node.left_child != None:
7+
preorder_traverse(node.left_child,op_func)
8+
9+
if node.right_child != None:
10+
preorder_traverse(node.right_child,op_func)
11+
12+
13+
def preorder_traverse_nonRecursion(node,op_func):
14+
stack = [node]
15+
16+
while len(stack) != 0:
17+
op_node = stack.pop()
18+
op_func(op_node)
19+
if op_node.right_child != None:
20+
stack.append(op_node.right_child)
21+
22+
if op_node.left_child != None:
23+
stack.append(op_node.left_child)
24+
25+
26+
27+
28+
if __name__ == "__main__":
29+
test_list = range(10)
30+
base_node = init_tree_from_list(test_list)
31+
def visit(node):
32+
print node.value
33+
34+
preorder_traverse_nonRecursion(base_node,visit)

0 commit comments

Comments
 (0)