C 樹的相關知識

2021-09-27 21:39:30 字數 1706 閱讀 1165

有4種遍歷二叉樹的常用方法:

前序遍歷

void

preorder

(binarytreenode

*t)//遞迴版

}

迭代使用棧來實現前序遍歷

void

preorderiter

(treenode* root)

//迭代版

stack> stack;

stack.

push

(root)

;while

(!stack.

empty()

)if(top-

>left!=

null)}

}

中序遍歷
void

inorder

(binarytreenode

*t)//遞迴

}

先把root、以及root左孩子都壓入棧中

棧頂出棧並訪問,把棧頂的右孩子作為新的根節點

void

inorderiter

(treenode* root)

//迭代

while

(!stack.

empty()

|| root!=

null

)auto top = stack.

top();

stack.

pop();

cout << top-

>val <<

" ";

root = top-

>right;

}}

後序遍歷
void

postorder

(binarytreenode

*t)//遞迴

}

迭代使用棧來實現後序遍歷

vector<

int>

postorderiter

(treenode* root)

//迭代

stack> stack;

stack.

push

(root)

;while

(!stack.

empty()

)if(top-

>right !=

null)}

reverse

(result.

begin()

, result.

end())

;//反轉容器

return result;

}

visit函式
void

visit

(binarytreenode

*x)

層次遍歷
void

levelorder

(binarytreenode

*t)catch

(queueempty)

q.pop();

}}

僅當樹非空時,才進入while迴圈。進入while迴圈後,首先訪問根節點,再把其子節點(如果有)加到佇列中,然後訪問隊首元素。若隊列為空,則front()丟擲乙個型別為queueempty的異常;若佇列不為空,則front()的返回值指向隊首元素指標,下一次迴圈將訪問這個元素。

樹的相關知識回顧

樹的資料結構相對來說也比較好理解。但由於為了查詢效率和儲存效率,又有多種樹形結構,對樹進行了限制。如二叉樹,平衡二叉樹,紅黑樹,b樹,b 樹。其實也沒多少多複雜,只是願不願意花時間去研究。個人花了點花時間回顧了一下平衡二叉樹和二叉樹的理論和實現。紅黑樹和b樹,b 樹暫時沒有去研究。後續有空了再補。只...

樹相關知識(補充)

1 二叉樹的主要性質 6 1 非空二叉樹上葉子結點數等於雙分支結點數加1 a 總結點數 度為2的結點 度為1的結點 度為0的結點 b 總結點數 度為2的結點數 2 度為1的結點 1 由公式ab得出 度為0的結點等於度為2的結點 1 2 二叉樹的第i層最多有2的i 1次方的結點。等比數列 3 高度 或...

C 之類的相關知識

一 函式模板 過載 引數個數不同,型別不同可以構成過載 將資料型別當引數進行傳遞 將資料型別和演算法進行分離 函式模板 用template去宣告模板 模板宣告只對dang當前函式有效 1.myswap a,b 隱式呼叫 不指名型別 讓編譯器自動推導 cout 標準輸出流變數 2.函式模板可以隱式呼叫...