二叉樹的一些問題

2021-08-08 22:17:30 字數 3285 閱讀 6334

//二叉樹的先序遍歷(遞迴)

void preorder(btnode *ptr)}

//二叉樹中序遍歷(遞迴)

void inorder(btnode *ptr)}

//二叉樹後序遍歷(遞迴)

void pastorder(btnode *ptr)}

//先序遍歷二叉樹(非遞迴)

void nicepastorder(btnode *ptr)

ptr = top(&st); pop(&st);

if(ptr->rightchild == null || ptr->rightchild == tag)

else}}

//利用前序和中序建立樹

//1.前序的第乙個字母為樹的根節點

//2.然後檢視中序序列中這個字母的位置,它之前的為左子樹,之後的為右子樹

//3.然後分別對這兩個子樹的前序和中序序列做同樣的步驟即可。

btnode *create1(char *ps,char *is,int n)

s->leftchild =create1(ps+1,is,pos);

s->rightchild =create1(ps+pos+1,is+pos+1,n-pos-1);

}return s;

}btnode * createpi(char *ps,char *is)

else}

//利用中序和後序,建立樹

//1.後序的最後乙個字母為樹的根節點

//2.然後檢視中序序列中這個字母的位置,它之前的為左子樹,之後的為右子樹

//3.然後分別對這兩個子樹的中序和後序序列做同樣的步驟即可。

btnode *create2(char *is,char *ls,int n)

p->leftchild =create2(is,ls,pos);

p->rightchild =create2(is+pos+1,ls+pos,n-pos-1);

}return p;

}btnode * createil(char *is,char *ls)

int n=strlen(ls);

return create2(is,ls,n);}

//在二叉樹中查詢值x

btnode * findvalue(btnode *ptr,elemtype x)

else

return p;}}

//知道孩子結點,找到母親結點

btnode * parent(btnode *ptr,btnode *child)

else

return ptr;}}

btnode *findparent(char *ptr,char *child)

else}

//求二叉樹的大小

int size(btnode *ptr)

else}

//求二叉樹的深度

int max(int x,int y)

int depth(btnode *ptr)

else}

//求葉子結點的個數

int sizeleaf(btnode *ptr)

else if(ptr->leftchild ==null && ptr->rightchild ==null)

else}

//二叉樹的先序遍歷(遞迴)

void preorder(btnode *ptr)}

//二叉樹中序遍歷(遞迴)

void inorder(btnode *ptr)}

//二叉樹後序遍歷(遞迴)

void pastorder(btnode *ptr)}

//先序遍歷二叉樹(非遞迴)

void nicepastorder(btnode *ptr)

ptr = top(&st); pop(&st);

if(ptr->rightchild == null || ptr->rightchild == tag)

else}}

//利用前序和中序建立樹

//1.前序的第乙個字母為樹的根節點

//2.然後檢視中序序列中這個字母的位置,它之前的為左子樹,之後的為右子樹

//3.然後分別對這兩個子樹的前序和中序序列做同樣的步驟即可。

btnode *create1(char *ps,char *is,int n)

s->leftchild =create1(ps+1,is,pos);

s->rightchild =create1(ps+pos+1,is+pos+1,n-pos-1);

}return s;

}btnode * createpi(char *ps,char *is)

else}

//利用中序和後序,建立樹

//1.後序的最後乙個字母為樹的根節點

//2.然後檢視中序序列中這個字母的位置,它之前的為左子樹,之後的為右子樹

//3.然後分別對這兩個子樹的中序和後序序列做同樣的步驟即可。

btnode *create2(char *is,char *ls,int n)

p->leftchild =create2(is,ls,pos);

p->rightchild =create2(is+pos+1,ls+pos,n-pos-1);

}return p;

}btnode * createil(char *is,char *ls)

int n=strlen(ls);

return create2(is,ls,n);}

//在二叉樹中查詢值x

btnode * findvalue(btnode *ptr,elemtype x)

else

return p;}}

//知道孩子結點,找到母親結點

btnode * parent(btnode *ptr,btnode *child)

else

return ptr;}}

btnode *findparent(char *ptr,char *child)

else}

//求二叉樹的大小

int size(btnode *ptr)

else}

//求二叉樹的深度

int max(int x,int y)

int depth(btnode *ptr)

else}

//求葉子結點的個數

int sizeleaf(btnode *ptr)

else if(ptr->leftchild ==null && ptr->rightchild ==null)

else}

關於二叉樹的一些問題

tips 關於二叉樹的絕大多數問題都可以用遞迴方法來實現,dfs。一位二叉樹根節點去掉之後又分為兩個子樹,對於子樹本身也可以看左二叉樹來處理。所以遞迴可以說很好用了 二叉樹的建立 public class bittree public bittree int data public static b...

二叉樹 路徑搜尋中的一些問題

目錄前言 1 求二叉樹的最大深度 leetcode104 2 求二叉樹的最小深度 leetcode111 3 求二叉樹的正向 逆向數字路徑和 leetcode129 4 求二叉樹的節點路徑和 leetcode437 5 小結 重要 二叉樹的路徑搜尋就是乙個簡易版的行程回溯演算法,之所以是簡易版是因為...

有關二叉樹的一些問題集合(一)

二叉樹的資料結構 class treenode1.求二叉樹的最大深度 int maxdeath treenode node intleft maxdeath node.left intright maxdeath node.right return math.max left,right 1 2.求...