線索二叉樹

2021-06-22 23:04:02 字數 1853 閱讀 2325

原始碼:

/**

*中序線索二叉樹

*@author 菜鳥

*@version 2014.7.23

*/#include #include #include typedef char datatype;

using namespace std;

//定義線索二叉樹的結構體

typedef struct nodethreadbitreenode;

//定義遍歷結構體

typedef structthreadbitreesearch;

/***中序線索化二叉樹的操作

*@param threadbitreenode *current表示當前節點的指標

*@param threadbitreenode **pre表示當前節點的前驅結點指標

*@return 無

*/void inthreadoperation(threadbitreenode *current,threadbitreenode **pre)else

if(current->rightchild != null)else

if((*pre)->rightchild == null)else

*pre = current;

inthreadoperation(current->rightchild,pre);

}cout<<"線索化成功!"(*root)->rightthread = 1;//有後驅

(*root)->leftchild = *root;

(*root)->rightchild = *root;

cout<<"建立成功!"(*root)->leftthread = 0;

inthreadoperation(current,&pre);

pre->rightchild = *root;

pre->rightthread = 1;

(*root)->rightchild = pre;

(*root)->rightthread = 1;

cout<<"建立成功!"p->leftchild = leftchild;

p->rightchild = rightchild;

return p;

}elseelse

}/**

*遍歷操作指向要遍歷的第乙個元素

*@param threadbitreesearch *tree 表示遍歷結構位址

*@return 無

*/void searchgetfirstoperation(threadbitreesearch *tree)

if(tree->current == tree->root)else

}/**

*遍歷操作指向要遍歷的下乙個元素

*@param threadbitreesearch *tree 表示遍歷結構位址

*@return 無

*/void searchgetnextoperation(threadbitreesearch *tree)

if(tree->current->rightthread == 0)

}tree->current = p;

if(tree->current == tree->root)

}/**

*結束遍歷

*@param threadbitreesearch *tree 表示遍歷結構位址

*@return int

*/int searchend(threadbitreesearch *tree)

int main()

system("pause");

return 1;

}

線索二叉樹

當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...

線索二叉樹

1.線索二叉樹結構和操作定義 threadbintree.h 功能 線索標誌域所有值 typedef enumnodeflag 功能 線索二叉樹結構體 typedef struct threadtreethreadbintree 前驅節點指標 threadbintree previous null ...

線索二叉樹

今天,我們一起用c 實現一顆線索二叉樹,具體 如下 threadinorderiterator.h具體內容如下 cpp view plain copy include threadtree.h template typename type class threadinorderiterator th...