python構建二叉樹測試用例–返回根節點
# 定義樹節點.
class
treenode
(object):
def__init__
(self, x)
: self.val = x
self.left =
none
self.right =
none
#將輸入的列表轉化為一棵二叉樹,返回根節點
defdeserialize
(data)
:def
dfs(data)
: val = data.pop(0)
if val ==
'null'
:return
none
node = treenode(val)
node.left = dfs(data)
node.right = dfs(data)
return node
return dfs(data)
# 中序遍歷:
def inorder(root):
if not root:
return
return inorder(root.left) +[root.val]+ inorder(root.right)
# 前序遍歷:
def preorder(root):
if not root:
return
return [root.val] + preorder(root.left) + preorder(root.right)
構造如下二叉樹
4
/ \
27/ \ / \13
58#可認為最後還有有8個null葉子結點,在以下第二種方法中需要時使用
第一種:
#測試1:全部手動配置左右結點,比較繁瑣
nodelist=
[treenode(i)
for i in[4
,2,7
,1,3
,5,8
]]nodelist[0]
.left=nodelist[1]
nodelist[0]
.right=nodelist[2]
nodelist[1]
.left=nodelist[3]
nodelist[1]
.right=nodelist[4]
nodelist[2]
.left=nodelist[5]
nodelist[2]
.right=nodelist[6]
root = nodelist[0]
print
('二叉樹根節點為:'
,root)
print
('前序遍歷'
,preorder(root)
)print
('前序遍歷'
,inorder(root)
)
二叉樹根節點為: <main.treenode object at 0x000001ef18d21668>
前序遍歷 [4, 2, 1, 3, 7, 5, 8]
前序遍歷 [1, 2, 3, 4, 5, 7, 8]
第二種:
#測試2:呼叫以上deserialize函式,給定的列表需要包含所有的null的葉子結點
data = [4, 2, 1, 'null', 'null', 3, 'null','null', 7, 5, 'null', 'null', 8, 'null', 'null']
root = deserialize(data)
print('二叉樹根節點為:',root)
print('前序遍歷',preorder(root))
print('前序遍歷',inorder(root))
輸出:
二叉樹根節點為: <main.treenode object at 0x000001ef18d21160>
前序遍歷 [4, 2, 1, 3, 7, 5, 8]
前序遍歷 [1, 2, 3, 4, 5, 7, 8]
第三種:
# 測試3:直接通過已有的樹的結點來定義
root = treenode(4, treenode(2, treenode(1),treenode(3)),treenode(7,treenode(5),treenode(8)))
print('二叉樹根節點為:',root)
print('前序遍歷',preorder(root))
print('前序遍歷',inorder(root))
輸出:
二叉樹根節點為: <main.treenode object at 0x000001ef18d01b70>
前序遍歷 [4, 2, 1, 3, 7, 5, 8]
前序遍歷 [1, 2, 3, 4, 5, 7, 8]
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
構建二叉樹
前序遍歷構建二叉樹是根據根節點 左節點 右節點的方式輸入資料,針對乙個節點來說,首先輸入的是根節點,根節點之後的數值應該是其左子節點,之後是右節點,如果是遞迴,則首先是一直設定左節點,之後再依次設定右節點。之前在看二叉樹過程中,見過最多的是輸入個位數字構建二叉樹,今天看到乙個可以輸入多個數字的輸入方...
二叉樹構建(一)
說明 1.根據先序遍歷和中序遍歷或者後序遍歷和中序遍歷可以構建一棵二叉樹 2.構建以後序遍歷和中序遍歷為例,結點資料域以整形為例。定義二叉樹類 核心是constractpostcore函式。class binarytree binarytreenode int value,binarytreenod...