樹 線索二叉樹的建立及其遍歷

2021-10-04 20:04:27 字數 2619 閱讀 6450

0線索二叉樹的儲存結構體:

1先序序列化:

先序構樹思想:

對於先序線索二叉樹,我想提醒的是:每次只會把當前節點的左子樹前驅鏈上,

這一次的 後繼 不會在本次鏈上,當pcur指向下乙個節點的時候,

才會把上一次的後繼鏈上

**:先序線索化:

先序遍歷的思想:

先往左遍歷一遍,到底了之後往後繼節點或者右子樹找(要先判斷是右子樹還是線索節點)

#include

using

namespace std;

struct node};

typedef node * tree;

tree pre=

new node;

void

create

(tree & root)

if(c==

'\n'

)return

; root=

new node;

//這一步一定不要漏了!!!

root-

>data=c;

create

(root-

>left)

;create

(root-

>right);}

//構建先序線索樹

void

preorderthreading

(tree & node)

if(pre!=

null

&&!pre-

>right)

pre=node;

if(node-

>left&&node-

>ltag==0)

preorderthreading

(node-

>left);if

(node-

>right&&node-

>rtag==0)

preorderthreading

(node-

>right);}

//這一次的 後繼 不會在本次鏈上,當pcur指向下乙個節點的時候,

//才會把上一次的後繼鏈上

//遍歷先序線索樹

void

preorder

(tree node)

cout<

>data<<

" ";

//還沒有把最後乙個輸出

if(temp-

>rtag==

1)temp=temp-

>right;

//跳到後繼節點上

while

(temp!=

null)}

}int

main()

2中序線索化:

中序構樹思想:

和先序差不多,所以先理解好先序,在看中序:

遍歷:

先找到最左邊的,然後找右子樹或者後繼線索節點

#include

using

namespace std;

struct node};

typedef node * tree;

tree pre=

new node;

void

create

(tree & root)

if(c==

'\n'

)return

; root=

new node;

//這一步一定不要漏了!!!

root-

>data=c;

create

(root-

>left)

;create

(root-

>right);}

void

inorderthreading

(tree node)

if(pre&&pre-

>right==

null

) pre=node;

inorderthreading

(node-

>right);}

//首先按照中序遍歷的順序,找到二叉樹的最左邊的節點,

//判斷是否有前驅,有則遍歷訪問,沒有則看右子樹和後繼的情況。

void

inorder

(tree node)

cout<

>data<<

" ";

while

(root&&root-

>rtag==1)

root=root-

>right;

//沒有後繼了,說明有右子樹 }}

intmain()

3後序線索化:

二叉樹線索化及其遍歷方法

include include include include typedef char datatype typedef enum pointflag typedef struct bintreenode node,pnode void initbintree pnode proot pnode ...

樹 二叉樹 線索二叉樹

一 線索二叉樹 1 什麼是線索化 將二叉樹以某種次序將其遍歷,得到線性序列,就是將非線性結構進行線索化。線索化的優點就是可以很快地得到前驅或後繼。如果儲存線索化的線性序列 儲存二叉樹地線索化序列的其中一種方法就是在結點上加兩個指標,乙個指向前驅乙個指向後繼,這樣的缺點就是儲存密度大大降低。另一種方法...

樹與二叉樹 線索二叉樹

若結點有左子樹,則其lchild域指向其左子樹,否則令lchild域指向其前驅 若結點有右子樹,則其rchild域指向其右子樹,否則令rchild域指向其後繼 為了避免混淆,需要改變結點結構,增加兩個標誌域,ltag,rtag,結構如下圖所示 0 lchild域指向其左子樹 1 lchild域指向其...