Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f5be8a9

Browse files
二叉树相关,数据结构定义,根据数组生成,前序遍历两种方式(递归和非递归)
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)

AltStyle によって変換されたページ (->オリジナル) /