//二叉樹的先序遍歷(遞迴)
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.求...