樹相關演算法總結 based C

2022-02-20 01:03:05 字數 1084 閱讀 6261

重點:前中後序遍歷(遞迴和非遞迴),層序遍歷,搜尋二叉樹的查詢。

資料結構:

struct

treenode

樹的三種遍歷方式,各兩種實現演算法(遞迴和非遞迴):

一、前序遍歷

前序遍歷方式:根左右

遞迴實現:遞迴實現的方式**一般比較簡單快捷。

void preorder1(treenode*root)

cout

<}非遞迴實現:由於前序遍歷方式有回溯的過程,所以需要用到棧把遍歷過的節點存起來。

void preorder2(treenode*root)

root=s.top();

s.pop();

root=root->right;

}}

二、中序遍歷

中序遍歷的方式:左根右

遞迴實現:

void midorder1(treenode*root)

}非遞迴實現:

void midorder2(treenode*root)

root=s.top();

s.pop();

cout

root=root->right;

}}

三、後序遍歷

後序遍歷的方式:左右根

遞迴實現:

void postorder1(treenode*root)

}非遞迴實現:後序遍歷的過程比較麻煩,有些節點需要遍歷兩遍(含有右子樹的那些節點) 所以通過設定乙個標誌位來標誌節點的當前遍歷次數。

void postorder2(treenode*root)

while(!s.empty())

}root=s.top();

cout

s.pop();

v.pop();}}

}

層序遍歷:queue,先進先出的佇列。

void printtree(binarytree*arr)

}

演算法題 樹相關

題目 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。方法1 遞迴 class solution def maxdepth self,root type root treenode rtype int if root is none return 0else ...

樹的相關基礎演算法

樹的相關基礎演算法,先序 中序 後序遞迴與非遞迴,層次遍歷,建立二叉搜尋樹。include include include using namespace std typedef struct tree bstree bstree newbstree int n void createtree bs...

與樹相關的演算法

1.樹的直徑 須知 對於一棵加權樹,權值定義為樹中兩個結點之間的距離,兩個結點間的最遠距離即為樹的直徑。最遠距離的兩個結點對應樹中的兩個葉子結點,否則兩個結點不構成最遠距離。m 1 動態規劃 由於兩個結點都是屬於樹的端結點 葉子結點 那麼對兩個結點向上朔源必會得到乙個公共的祖先結點 x。從 x 出發...