LeetCode:Binary Tree Level Order Traversal二叉樹層次遍歷
=======題目描述=======
題目連結:https://leetcode.com/problems/binary-tree-level-order-traversal/
題目內容:
Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7],
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
=======演算法實現=======
層次遍歷二叉樹
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def levelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ if root ==None: return [] #使用列表實現佇列功能,儲存root mQueue =[root] #定義儲存遍歷結果的變數 mRes=[] #當佇列mQueue不為空時,進行遍歷 while mQueue: #儲存節點變數,每次迴圈時置空 nodes=[] #儲存節點的值 nodeValues=[] for node in mQueue: nodeValues.append(node.val) if node.left: nodes.append(node.left) if node.right: nodes.append(node.right) #將新新增的節點重新賦值給mQueue mQueue=nodes mRes.append(nodeValues) return mRes
=======演算法筆記*二叉樹=======
樹是資料結構中非常重要的一種,主要的用途是用來提高查詢效率,對於要重複查詢的情況效果更佳。
定義
有且僅有一個根結點,除根節點外,每個結點只有一個父結點,最多含有兩個子節點,子節點有左右之分。
儲存結構
二叉樹的儲存結構可以採用順序儲存,也可以採用鏈式儲存,其中鏈式儲存更加靈活。
在鏈式儲存結構中,與線性連結串列類似,二叉樹的每個結點採用結構體表示,結構體包含三個域:資料域、左指標、右指標。
二叉樹的遍歷
“遍歷”是二叉樹各種操作的基礎。二叉樹是一種非線性結構,其遍歷不像線性連結串列那樣容易,無法通過簡單的迴圈實現。
樹的遍歷主要有兩種,一種是深度優先遍歷,像前序、中序、後序;另一種是廣度優先遍歷,像層次遍歷。在樹結構中兩者的區別還不是非常明顯,但從樹擴充套件到有向圖,到無向圖的時候,深度優先搜尋和廣度優先搜尋的效率和作用還是有很大不同的。
深度優先一般用遞迴,廣度優先一般用佇列。一般情況下能用遞迴實現的演算法大部分也能用堆疊來實現。
#前序遍歷
def preorder(self,root):
if(root is None):
return
print root.val
self.preorder(root.left)
self.preorder(root.right)
#後序遍歷
def postorder(self,root):
if(root is None):
return
self.postorder(root.left)
self.postorder(root.right)
print root.val
#中序遍歷
def inorder(self,root):
if(root is None):
return
self.inorder(root.left)
print root.val
self.inorder(root.right)
參考:
https://blog.csdn.net/zhaoxianyong/article/details/7165386