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