資料結構之二叉樹基礎三

2021-07-29 02:58:59 字數 1561 閱讀 3070

#include #include #include #include #include #include #include #include using namespace std;

struct btnode

;typedef struct btnode;

//重建二叉樹

/*1、用前序序列的第乙個結點作為根結點;

2、在中序序列中查詢根結點的位置,並以此為界將中序序列劃分為左、右兩個序列(左、右子樹);

3、根據左、右子樹的中序序列中的結點個數,將前序序列去掉根結點後的序列劃分為左、右兩個序列,它們分別是左、右子樹的前序序列;

4、對左、右子樹的前序序列和中序序列遞迴地實施同樣方法,直到所得左、右子樹為空。

*/btnode* construct(int a,int n,int b,int m)

//判斷一棵二叉樹是否為完全二叉樹

bool iscompletebt(btnode*root)

//判斷是否有未被訪問到的結點

while(!q.empty())

}return true;

}int depth(btnode* root)

int n1,n2;

n1=depth(root->lc);

n2=depth(root->lc);

return (n1>n2)?1+n1:1+n2;

}//找出二叉樹中最遠結點的距離

int maxpath=0;

int longestpath(btnode*root)

if(root->lc!=null)

longestpath(root->lc);//遞迴查詢左子樹

if(root->rc!=null)

longestpath(root->rc);//遞迴查詢右子樹

return maxpath;

}//二叉樹中和為某一值的路徑

void findpath(btnode*ptreenode,int expectedsum,vectorpath,int currentsum)

cout << endl;

}if(ptreenode->lc)//當前結點不為葉子結點,查詢它的左右孩子結點

findpath(ptreenode->lc, expectedsum, path, currentsum);

if(ptreenode->rc)

findpath(ptreenode->rc, expectedsum, path, currentsum);

currentsum -= ptreenode->val;//左右孩子結束,刪除當前結點,退至其父結點

path.pop_back();

}//找到二叉樹中兩個結點最近的公共祖先結點

btnode* findnearestancestor(btnode*root)

//層序遍歷

vector> levelorder(btnode* proot)

res.push_back(vec);

}return res;

}int main()

資料結構之二叉樹基礎二

include include include include include using namespace std struct btnode typedef struct btnode int depth btnode root int n1 depth root lc int n2 dept...

資料結構之二叉樹

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

資料結構之二叉樹

定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...