亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言線索二叉樹的前中后如何創建和遍歷

發布時間:2022-02-21 13:40:45 來源:億速云 閱讀:158 作者:iii 欄目:開發技術

這篇“C語言線索二叉樹的前中后如何創建和遍歷”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C語言線索二叉樹的前中后如何創建和遍歷”文章吧。

    1.結構

    #include<stdio.h>
    #include<stdlib.h>
    #define false 0
    #define true 1
    using namespace std;
    typedef struct BTnode{
     	int data;
     	struct BTnode *lchild,*rchild;
     	int ltag,rtag;
     }*BTree,BTnode;

    1.1初始化tag

    #include<stdio.h>
    #include<stdlib.h>
    #define false 0
    #define true 1
    using namespace std;
    typedef struct BTnode{
     	int data;
     	struct BTnode *lchild,*rchild;
     	int ltag,rtag;
     }*BTree,BTnode;

    2.基本操作

    2.1 先序創建二叉樹

    int j=0;  //創建二叉樹的全局變量 
     //先序創建二叉樹
     int CreateBTree(BTree &T){
     	int str[]={1,2,3,NULL,4,NULL,NULL,NULL,5,6,NULL,7,NULL,NULL,8,NULL,NULL};
     	if(str[j]=='#') return false;
     	if(str[j]==NULL){
     		T=NULL;
     		j++;
    	 }else{
    	 	T=(BTnode *)malloc(sizeof(BTnode));
    	 	T->data=str[j];
    	 	j++;
    	 	CreateBTree(T->lchild);
    	 	CreateBTree(T->rchild);
    	 }
     }

    輸出函數:

    inline bool visit(int e){   //此處使用內斂函數,提高運行效率 
     	printf("%d",e);
     	return true;
     }

    2.2.先序線索化

    //先序線索化.
     void prehread(BTree &root){
    	if(root!=NULL){
    		if(root->lchild==NULL){
    			root->ltag=1;
    			root->lchild=pre;
    		}else{
    			root->ltag=0;
    		}
    		if(pre){
    			if(pre->rchild==NULL){
    				pre->rtag=1;
    				pre->rchild=root;
    			}else{
    				pre->rtag=0;
    			}
    		}
    		pre=root;
    		if(root->ltag==0){
    		prehread(root->lchild);	
    		}
    		if(root->rtag==0){
    			prehread(root->rchild);
    		}
    	}
    }
    2.2.1.先序遍歷
    //尋找先序后繼 
    BTree preNext(BTree T){
     	if(T->rtag==1){
    		return T->rchild;
    	 }else{
    	 	if(T->ltag==0){
    	 		return T->lchild;
    		 }else{
    		 	return T->rchild;
    		 }
    	 }
    	 }
    //先序線索二叉樹的遍歷
    void prebianli(BTree T){
    	BTree p;
    	p=T;
    	while(p){
    		visit(p->data);
    		p=preNext(p);
    	}
    }

    C語言線索二叉樹的前中后如何創建和遍歷

    2.3.中序線索化

    //中序線索化
    BTree pre=NULL ;  //中序線索化的全局變量 
    void Inthread(BTree &root){
    	if(root!=NULL){
    		Inthread(root->lchild);
    		if(root->lchild==NULL){
    			root->ltag=1;
    			root->lchild=pre;
    		}else{
    			root->ltag=0;
    		}
    		if(pre){
    			if(pre->rchild==NULL){
    				pre->rtag=1;
    				pre->rchild=root;
    			}else{
    				pre->rtag=0;
    			}
    		}
    		pre=root;
    		Inthread(root->rchild);
    	}
    }
    2.3.1 中序遍歷
    //求中序首結點 
    BTree InFirst(BTree T){
    	BTree p=T;
    	if(p==NULL) return NULL;
    	while(p->ltag==0){
    		p=p->lchild; 
    	}
    	return p;
    } 
    //求中序后繼
     BTree InNext(BTree T) {
     	BTree next=NULL;
     	if(T->rtag==1){
     		next=T->rchild;
    	 }else {
    		T = T->rchild;
    		while (T->ltag==0 ) {
    			T = T->lchild;
    		}
    		next=T;
    	 }
    	 return next;
     }
     //中序線索二叉樹的遍歷
    void Inbianli(BTree T){
    	BTree p;
    	p=InFirst(T);
    	while(p){
    		visit(p->data);
    		p=InNext(p);
    	}
    }

    C語言線索二叉樹的前中后如何創建和遍歷

    2.4.后序線索化

    //后續線索化
      void Postthread(BTree &root){
    	BTree pre=NULL;
    	if(root){
    		Postthread(root->lchild);
    		Postthread(root->rchild);
    		if(root->lchild==NULL){
    			root->ltag=1;
    			root->lchild=pre;
    		}
    		if(pre&&pre->rchild==NULL){
    			pre->rtag=1;
    			pre->rchild=root;
    		}
    		pre=root;
    		}
    }
    2.4.1 后序遍歷
    //求后序前驅 
    BTree postnext(BTree T){
    	if(T->ltag==0){
    		if(T->rtag==0){
    			return T->rchild;
    		}else{
    			return T->lchild;
    		}
    	}else {
    		return T->lchild;
    	}
    }
    //后序遍歷
    void postbianli(BTree T){
    	BTree p;
    	p=T;
    	while(p){
    		p=postnext(p);
    		visit(p->data);
    	}
    }

    C語言線索二叉樹的前中后如何創建和遍歷

    以上就是關于“C語言線索二叉樹的前中后如何創建和遍歷”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    偏关县| 义马市| 沿河| 富民县| 湖北省| 磐安县| 黔南| 翁源县| 平乡县| 宾阳县| 黎川县| 六枝特区| 临漳县| 湖南省| 囊谦县| 贺州市| 隆子县| 文安县| 镇平县| 新郑市| 新安县| 海丰县| 自贡市| 道孚县| 崇州市| 仙桃市| 和龙市| 泌阳县| 海淀区| 绥阳县| 会同县| 江源县| 琼中| 昌乐县| 五河县| 南涧| 宜章县| 乳源| 新晃| 长春市| 大理市|