給定乙個二叉樹,返回它的中序 遍歷。
示例:輸入: [1,null,2,3]
1\2
/3
輸出: [1,3,2]
高階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?
樹一種特殊的圖,是連通的,無迴路的無向圖。
因此,二叉樹的搜尋也稱二叉樹的遍歷,同樣有深度優先遍歷和廣度優先遍歷兩種方式。
廣度優先遍歷也稱為層序遍歷,遍歷原則為:以樹的根節點開始,按照樹的高度由低到高,一層一層地遍歷下去,每一層按照從左至右的順序遍歷,直至到達樹的最大深度,遍歷完全部節點為止。
深度優先遍歷,遍歷原則為:從樹的根節點開始,沿著左子樹進行深度遍歷,直到到達葉子節點為止;然後回溯到根節點,進行右子樹的深度遍歷,直到遍歷完所有節點。
具體的,按照根節點相對於子節點的訪問順序,可進一步分為前序遍歷、中序遍歷和後序遍歷。
這裡固定左節點和右節點的遍歷順序,那麼:
前序(pre-order)指先訪問根節點,再遍歷左子樹和右子樹;
中序(in-order)是指先遍歷左子樹,接著訪問根節點,最後遍歷右子樹;
後序(post-order)是指先遍歷左子樹,接著遍歷右子樹,最後訪問根節點。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
void
inorder
(treenode* node, vector<
int>
& ans)
inorder
(node-
>left, ans)
; ans.
push_back
(node-
>val)
;inorder
(node-
>right, ans);}
};
class
solution
//訪問根節點及左子樹這條路徑上的節點
treenode* node = stk.
top();
stk.
pop();
ans.
push_back
(node-
>val)
;//按照同樣的策略,深度遍歷右子樹
root = node-
>right;
}return ans;}}
;
力扣94 二叉樹的中序遍歷 中序遍歷
給定乙個二叉樹,返回它的中序 遍歷。示例 輸入 1,null,2,3 12 3輸出 1,3,2 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?中序遍歷是左子樹 根 右子樹。這個是同乙個規律適用於整個樹,所以使用遞迴。結束條件為沒有發現值,即節點為null。definition for a bi...
94 二叉樹的中序遍歷
給定乙個二叉樹,返回它的中序 遍歷。示例 輸入 1,null,2,3 1 2 3輸出 1,3,2 這道題在王道408中有講到,但是記憶不是特別清晰了於是再寫了一次 首先當然是最簡單的遞迴寫法 class solution public listhelp treenode root,list list...
94 二叉樹的中序遍歷
94.二叉樹的中序遍歷 給定乙個二叉樹,返回它的中序 遍歷。示例 輸入 1,null,2,3 1 2 3輸出 1,3,2 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?definition for a binary tree node.struct treenode class solutio...