思路:採用中序遍历的方法,visit函数须要完毕的功能为:
1、当前节点的左子节点指向上一次訪问的节点;
2、将上一次訪问节点的右子节点指向当前节点;
3、最后更新上一次訪问节点为当前节点。
在第二步时须要推断上一次訪问节点是不是为NULL,假设是,则第二步改为链表的头结点指向当前节点。
程序例如以下:
struct BSTnode { int data; BSTnode * left; BSTnode * right; }*pList,*pHead; void visit(BSTnode * pCurrent) { pCurrent->left = pList;//*当前节点的左子节点指向上一次訪问的节点;*// if (pList != NULL) pList->right = pCurrent;//将上一次訪问节点的右子节点指向当前节点// else pHead = pCurrent; pList = pCurrent; } void inorder(BSTnode* root) { if (root != NULL) { inorder(root->left); visit(root); inorder(root->right); } }