二叉樹中序遍歷線索完整實現

2021-08-08 16:23:03 字數 1763 閱讀 1930

#ifndef rtagtree_h_included

#define rtagtree_h_included

typedef enum tag; ///link==0,thread==1;

typedef char datatype;

typedef struct node

node,*bitreenode;

void createtree(bitreenode &bt);///前序構造二叉樹

void printtree(bitreenode bt,int depth);///輸出乙個二叉樹

void printtree(bitreenode bt);///輸出乙個二叉樹(封裝上面的輸出函式)

void inthread(bitreenode bt,bitreenode &pre);///中序遍歷線索二叉樹

void createinthread(bitreenode bt,bitreenode &thrt);///中序建立線索二叉樹

void printinthread(bitreenode thrt);///輸出中序線索遍歷的二叉樹

#endif // rtagtree_h_included

#include

#include

#include

//#include

#include

#include"rtagtree.h"

using namespace std;

void createtree(bitreenode &bt)///前序構造二叉樹(前序)

bt=new node;

bt->data=ch;

createtree( bt->lch);///遞迴遍歷左子樹

createtree( bt->rch);///遞迴遍歷右子樹

}const int row=5;///表示行的空格

const int col=35;///表示行的——這個對齊符號

///depth表示該子樹當前的層次

void printtree(bitreenode bt,int depth)///輸出乙個二叉樹

void printtree(bitreenode bt)///輸出乙個二叉樹(封裝上面的輸出函式)

///建立前驅

else

bt->ltag=link;

if(pre!=null&&pre->rch==null)///建立前驅的後繼

else

bt->rtag=link;

pre=bt;///否則保持pre指向bt的前驅

inthread(bt->rch,pre);}}

void createinthread(bitreenode bt,bitreenode &thrt)///中序建立線索二叉樹,thrt為頭指標

}void printinthread(bitreenode thrt)///輸出中序線索遍歷的二叉樹,bt為根結點,thrt為頭結點

}#include

#include

#include

#include

#include"rtagtree.h"

using namespace std;

int main()

{freopen("data.in","r",stdin);

bitreenode bt,thrt;

createtree(bt);///前序構造二叉樹

printtree(bt);

cout<<"輸出中序線索遍歷的二叉樹如下:"<

二叉樹的線索化 線索二叉樹的遍歷(中序)

二叉樹的線索化 對於n個節點的二叉樹,在二叉儲存鍊錶中有n 1個空鏈域,利用這些空鏈域存放某種遍歷次序下的指向該節點的前驅和後繼的指標,這些指標成為線索,被線索的二叉樹成為線索二叉樹。這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binarytree 根據線索性...

Java實現線索二叉樹及中序遍歷

線索二叉樹 含義 可以通過充分利用二叉樹種的空指標域來存放在某種方式遍歷下的前驅指標和後繼指標,我們把指向前驅和後繼的指標稱為線束,加上線索的二叉樹稱為線索二叉樹。node定義 比普通的節點多出來兩個bool型別,用來指示左右指標是指向子節點還是線索。public static class node...

中序線索二叉樹

就是在中序遍歷的時候加上線索,為了區分線索和孩子,要多加兩個標誌變數ltag,rtag如果標誌為true就表明是線索,如果為false就表示孩子 一般規定是將做指標為空的指標域用來存放直接前驅 將有指標為空的指標域用來存放直接後繼 當然如果不為空的話就不會用來存放前後繼,而是孩子了 意思就是存放前繼...