二叉樹(五)中序線索二叉樹的建立

2021-09-02 14:02:09 字數 1398 閱讀 5393

如果ltag值為0,表示lchild指向結點的左孩子,如果ltag=1,表示lchild結點指向結點的前驅;如果rtag=0,表示rchild指向結點的右孩子,如果rtag=1,表示rchild指向結點的後繼。

要求輸入乙個先序建立二叉樹所需要的先序序列,按照中序方式輸出該二叉樹所對應的線索二叉樹的每個結點,包括它的ltag,data,rtag三個域的值。二叉樹的資料域型別為字元型,擴充套件二叉樹的葉子結點用『#』表示。

輸入描述:

輸入一棵擴充套件二叉樹的先序遍歷序列,共用一行,直接輸入某二叉樹的加了葉子結點的擴充套件二叉樹字串行,以空格隔開。
輸出描述:

輸出中序遍歷的該二叉樹所對應線索二叉樹的每個結點,包括它的ltag,data,rtag域,輸出格式為每行乙個結點,資料之間以空格隔開
輸入樣例:

a b # # c d # e # f # # g h # i k # # # #
輸出樣例:

1 b 1

0 a 0

1 d 0

1 e 0

1 f 1

0 c 0

1 h 0

1 k 1

0 i 1

0 g 1

#includeusing namespace std;

struct node

;class intree

protected:

node *root;

node *creat(node *b);

void print(node *b,node *pre);

void inorder(node *b);

};node *intree::creat(node *b)

else

b->rchild = creat(b->rchild);

if(b->rchild == null)

b->rtag = 1;

else

}return b;

}void intree::print(node *b,node *pre)

if(b->rchild==null)

if(pre->rtag==1)

pre = b;

print(b->rchild,pre);

}intree::intree()

node *intree::next(node *p)

else

}return q;

}void intree::inorder()

}void intree::inorder(node *b)

else }

int main()

中序線索二叉樹

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

二叉樹中序線索

我先說一說 每個 節點 那 五個格 的資料 的含義中間拿乙個是儲存資料的。從左向右 第乙個 和 第五個 是指標,具體指向什麼 取決於第二個 和 第四個的值 第二個 如果是零,實線表示,則 第乙個指向的是 左孩子 第二個 如果是1,虛線表示,則 第乙個 指向的是 在中序遍歷次序下 該節點的前驅 即前乙...

中序線索二叉樹

對於一顆有n個節點的二叉樹,每個節點有2個指標域,共2n個指標域,使用n 1個指標域,二叉線索樹便是將剩下的n 1個指標域也利用起來。在普通二叉樹中,我們僅知道乙個節點的左右孩子,並不知道它的直接前驅節點和直接後驅節點,若能知道它的前驅節點和後去節,便可以將這個資料結構進行遍歷,可極大的提高效率。二...