中序線索化二叉樹

2021-08-13 01:25:06 字數 3074 閱讀 1770

線索化二叉樹。

(1)中序線索化二叉樹;

(2)遍歷線索化二叉樹。

*/#include

#include

#define maxsize 100

typedef

char elemtype;

using

namespace

std;

typedef

struct node

tbtnode;

/* 對以*p為根節點的二叉樹中序線索化。

演算法思路:

在指標不為null時,先對*p節點的左子樹線索化,若*p沒有左孩子節點,則將其lchild指標線索化為指向其前驅節點*pre,將其ltag置為1,

若*pre節點的rchild指標為null,將其rchild指標線索化為指向其後繼節點*p,將其rtag置為1;最後對*p節點的右子樹線索化。

*/

tbtnode *pre;

void thread(tbtnode *&p)

//先對*p進行前驅節點線索化,再對*pre進行後繼節點線索化,而並不是*p的後繼節點,方便。

else

p->ltag=0;

if(pre->rchild==null) //*pre右孩子不存在,進行後繼節點線索化

else

pre->rtag=0;

pre=p;

thread(p->rchild); //右子樹線索化

} } /*

將以二叉鏈儲存的二叉樹b進行中序線索化,並返回線索化後頭節點指標root。

*/

tbtnode *creathread(tbtnode *b) //中序線索化二叉樹

return root;

} void createtbtnode(tbtnode * &b,char *str)

} }

j++;

ch=str[j];

} } void disptbtnode(tbtnode *b) //輸出二叉樹

} } /*

遍歷線索化二叉樹:

演算法思想:

遍歷某種次序的線索二叉樹,從該次序的開始節點出發;反覆找到該節點在該次序下的後繼節點,直到終端節點,

其rchild指標被線索化為指向頭節點。

(在中序二叉樹中,開始節點就是根節點的最左下節點)

*/void thinorder(tbtnode *tb)

p=p->rchild;

} } int main()

線索化二叉樹

1.建立二叉樹

2.先序遞迴遍歷輸出二叉樹

3.線索化二叉樹

4.輸出線索化二叉樹

/*線索化二叉樹

1.建立二叉樹

2.先序遞迴遍歷輸出二叉樹

3.線索化二叉樹

4.輸出線索化二叉樹

*/#include

#include

#include

#include

using

namespace

std;

class node

;class thread_binary_tree

~thread_binary_tree(){}

//建立二叉樹

void create_binary_tree(string filename)

//先序遞迴輸出二叉樹

void displayfront_tree()

//建立線索化二叉樹

void create_thread_btree()

//輸出線索化二叉樹

void display_thread_btree()

private:

node *t;

node *pre;

node *thread_root;

//建立二叉樹

void create_tree(string str)

else

if (str[0] == ')')//必須使用if-else if

else

if (str[0] == ',')

else

else

if (k == 2)}}

str.assign(str.substr(1, str.length() - 1));//構建新串,將串首字元除去}}

//先序遞迴輸出二叉樹

void output_fro(node *t)

else

output_fro(t->rchild);//先序遞迴右子樹

cout

<< ")";}}

}//中序線索化二叉樹

void thread(node *&p)

else

//存在左子節點

if (pre->rchild == null)//若右節點無子節點,則右指標指向後繼節點

else

//存在右子節點

pre = p;//更新

thread(p->rchild);//處理右子樹}}

//建立線索化二叉樹

node *createthread(node *t)

else

return root;

}//遍歷輸出線索化二叉樹

void output_thread(node *t)

cout

<< p->data << ends;

while (p->rtag&&p->rchild != t)

p = p->rchild;}}

};int main()

二叉樹中序線索化

處理當前結點的前驅結點 處理後序結點 param node 當前需要線索化的結點 public void threadednodes heronode node 1.先線索化左子樹 threadednodes node.getleft 2.線索化當前結點 難點 處理當前結點的前驅結點 以8結點來理解...

中序線索化二叉樹

中序線索化二叉樹 1 void tree intree node root,node pre 5 intree root lchild,pre 到達當前結點的左子樹的底部左結點 6if root lchild null 注意下列的條件判斷,要先判斷pre是不是空,再是 pre的其他指標域!10if ...

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

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