作為鹹魚,這個學期學習了一種極為重要的資料結構:
二叉樹
和之前的線性資料結構比起來,二叉樹是非線性的,擁有多樣的建立和遍歷方式;
剛剛上手的時候,總會覺得有點暈頭轉向;
加之遞迴函式又有些生疏,剛開始學習的時候總是會出現一些莫名其妙的報錯;
那麼先從基礎的開始:
二叉樹的建立與三種遍歷方式
首先是定義二叉樹節點
struct treenode
;
接下來是最基礎的操作,二叉樹的建立:
遞迴建立,要注意節點的空間申請
struct treenode*
buildtree
(struct treenode* root)
root =
(struct treenode*
)malloc
(sizeof
(struct treenode));
root->val = val;
root->left =
buildtree
(root->left)
;//建立左子樹
root->right =
buildtree
(root->right)
;//建立右子樹
return root;
}
接下來是二叉樹的三種遍歷方式,
雖然先根,中根,後根遍歷的結果在順序上差別相當大;
但其實仔細分析遍歷過程的話,這三種的遞迴遍歷的思路非常接近;
而在**上也僅僅只有微妙的差異:
先根遍歷:
void
scantreepre
(struct treenode *root)
中根遍歷:
void
scantreemid
(struct treenode *root)
後根遍歷:
void
scantreepost
(struct treenode *root)
**非常精簡,思路也很清晰,即使用紙筆也可以很快模擬出遍歷過程
以下是主函式:
int
main()
二叉樹三種遍歷方式
三種遍歷方式是按照根節點的訪問順序來定義的 1 前序遍歷 先訪問根結點 然後遍歷左子樹,最後遍歷右子樹 並且,在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。根左右 2 中序遍歷 先遍歷左子樹 然後訪問根結點,最後遍歷右子樹 並且,在遍歷左 右子樹時,仍然先遍歷左子樹,然後訪問...
Python 二叉樹的建立與三種遍歷方式
建立和遍歷均使用遞迴的方式進行,非常簡潔。建立 自上而下。每個節點處,都先遞迴建立左子樹,直至左子樹為空,再建立右子樹。前序遍歷 每個節點處,先訪問根節點,再訪問左子樹,最後訪問右子樹。中序遍歷 每個節點處,先訪問左子樹,再訪問根節點,最後訪問右子樹。後序遍歷 每個節點處,先訪問左子樹,再訪問右子樹...
重建二叉樹 遍歷二叉樹的三種方式
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。示例 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7限制 0 節點個數 5000 這個題的解法...