構造中序線索二叉樹

2021-08-28 12:55:53 字數 1157 閱讀 5530

主要是利用二叉樹的空指標域,若為空,使左指標指向前驅,並標記ltag為1;使右指標指向後驅,並標記rtag為1;

要注意的是構造結束後,此時pre指向最後乙個結點,此時需記得pre->right = nullptr, pre->rtag = 1。否則這棵樹的右子樹無法遍歷;

這樣使得這些指標域不至於浪費,並能夠加快查詢結點前驅和後繼的速度。

#include #include using namespace std;

typedef int elementtype;

typedef struct treenode

}*threadtree;

void visit(treenode* node)

void inorder(threadtree root)

}threadtree bst_insert(threadtree root, int n = 0)

threadtree p = root, pre;

while( p )

if( x < pre->val ) pre->left = t;

else pre->right = t;

} return root;

}// 構造中序線索二叉樹,注意引數是引用

void inthread(threadtree& p, threadtree& pre)

if( pre && !pre->right )

pre = p; //當前結點轉為前驅

inthread(p->right, pre); //右子樹線索化

}

} bool createinthread(threadtree root)

return false;

}// 中序遍歷第乙個節點,是最左下的結點(不一定是葉節點)

treenode* firstnode(threadtree p)

// 後繼結點,若無直接後繼,則返回線索後繼

treenode* nextnode(threadtree p)

void thread_inorder(threadtree root)

//7//6 2 8 1 4 7 3

int main( )

return 0;

}

中序線索二叉樹

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

二叉樹中序線索

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

中序線索二叉樹

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