如果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個指標域也利用起來。在普通二叉樹中,我們僅知道乙個節點的左右孩子,並不知道它的直接前驅節點和直接後驅節點,若能知道它的前驅節點和後去節,便可以將這個資料結構進行遍歷,可極大的提高效率。二...