輸出中序遍歷的結點包括結點的標記域與資料域

2021-10-01 06:10:13 字數 1311 閱讀 2517

如果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 text

; ~text()

; void preorder() //前序遍歷二叉樹

; void judge(node *bt); //判斷左右標記的輸出數值並且輸出

private:

node *creat();

node *root;

void release(node *bt);

void preorder(node *bt);

};void text::judge(node *bt)

else

if(bt->rchild == null)

else

cout << bt->ltag << " " << bt->data << " " << bt->rtag ;

cout << endl;

}void text::preorder(node *bt)

else //中序輸出 左標記 ——資料 ——右標記

}node* text::creat()

else

return bt;

}void text::release(node *bt)

else }

int main()

基於中序遍歷找到乙個結點的後繼結點

題目 基於中序遍歷找到乙個結點的後繼結點。分析 首先明白中序遍歷,順序為 左 根 右 如果當前結點為p。有兩種情況 1.當p有右子樹時,那麼其右子樹的最左結點即為所求 2.當p沒有右子樹時。有以下兩種情況 沿著p向上找,假設p的父結點的左孩子是p。那麼該父結點即為所求。否則繼續向上找。找到中序遍歷下...

輸出中序遍歷下最後乙個結點

include include typedef char datatype 樹結構體的定義 typedef struct node bintree bintree root typedef struct stack 棧的結構定義 seqstack void push seqstack s bintr...

演算法題 二叉樹結點的中序遍歷的後繼結點

題目 給出二叉樹的乙個結點,返回它中序遍歷順序的下乙個結點。思路 如果有指向父親的結點,則 時間複雜度為樹的高度o lgn 1 有父結點指標 2struct treenode3 910 treenode inordersuccessor treenode node 1124 25 else 2633...