#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 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...