資料結構系列之二叉樹(C 實現)

2021-09-02 09:28:42 字數 1947 閱讀 3231

struct treenode 

};

遞迴寫法很水,這裡就不在展開描述了,直接貼**。

void preorder(treenode* head) 

cout << head->val; //中

preorder(head->leftchild); //左

preorder(head->rightchild); //右

}

void inorder(treenode* head) 

inorder(head->leftchild); //左

cout << head->val; //中

inorder(head->rightchild); //右

}

void postorder(treenode* head) 

postorder(head->leftchild); //左

postorder(head->rightchild);//右

cout << head->val; //中

}

void preorder(treenode* head) 	

stackstack_tree;

stack_tree.push(head);

while (!stack_tree.empty())

if (head->leftchild)

}}

中序遍歷就不像先序遍歷那麼好理解了。

void inorder(treenode* head) 

else

}}}

中序遍歷的順序是左中右,所以我們就有三個原則對應上面的**

給定乙個頭結點,如果這個節點不為空,我們就一直往左找(壓棧)

如果當前節點為空,從棧中彈出乙個,並列印,然後節點向右判斷(彈出的節點的右孩子。)注意:這裡遍歷的順序是左中右。如果右節點為空就說明當前這顆子樹已經遍歷完了,就彈出這個子樹的父節點。

如果當前節點不為空,節點入棧,並接著找當前節點的左孩子

非遞迴的後序遍歷有多種實現方式,這裡列了乙個很好理解的例子。思路:後序遍歷是左右中,那麼我們按中右左的順序壓棧到_data棧,然後把_data棧中的元素彈出,放到_help,輸出_help棧的順序就是左右中。

void postorder(treenode* head) 

stack_datastack;

stack_helpstack;

_datastack.push(head);

while (!_datastack.empty())

if (head->leftchild != nullptr)

} while (!_helpstack.empty())

}

滿二叉樹一定是平衡二叉樹,平衡二叉樹不一定是滿二叉樹。遞迴函式對於數來說可以回到乙個節點三次,通過左右子樹的遞迴呼叫來判斷左右是否平衡。以每乙個節點作為頭結點的數都是平衡二叉樹,那麼這棵樹就是平衡的。

對於乙個節點是否平衡,有四個資訊需要考察:1>這個節點的左子樹是否平衡。2>這個節點的右子樹是否平衡。3>如果子樹都平衡,那麼兩個子樹的高度差是否平衡。所以在遞迴的過程中需要返回兩個資訊,是否平衡,以及高度

列出可能性,整理出返回值型別

判斷一顆數是否是搜尋二叉樹:中序遍歷是否是乙個公升序陣列,否則就不是。

寫在後面:

這裡放一點自己學習二叉樹時的一些理解,有些問題可能理解的不是很對,請不要照搬照抄。

1>

壓棧的實質就是我需要讓我的子過程給我返回結果。棧結構是先進後出,特別適合二叉樹的遍歷。所以我們可以自己搞乙個棧,來存放自己需要用到的資訊。

2>

一棵樹是可以被分解成左邊界

資料結構之二叉樹實現

1.二叉樹的原理分析 樹是一種重要的非線性資料結構,直觀地看,它是資料元素 在樹中稱為結點 按分支關係組織起來的結構。二叉樹 binary tree 是每個節點最多有兩個子樹的有序樹。通常子樹被稱作 左子樹 和 右子樹 二叉樹演算法的排序規則 1 選擇第乙個元素作為根節點 2 之後如果元素大於根節點...

資料結構之二叉樹 C 二

目錄 table of contents 類的部分實現 二叉樹是一種特殊的樹,在上一節中也介紹了樹的其他形式,例如 霍夫曼樹,b樹等。其中,二叉樹的常用操作有 1.確定樹高 2.確定元素數目 3.複製 4.顯示或列印二叉樹 5.確定兩顆二叉樹是否一樣 6.刪除整顆樹 這些操作都可以通過有步驟的遍歷二...

資料結構之二叉樹

在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...