下面是二叉搜索树需要用到的头文件binary_tree.h
#include struct BinaryTreeNode{int value;BinaryTreeNode* pLeft;BinaryTreeNode* pRight;
};BinaryTreeNode* CreateBinaryTreeNode(int value){BinaryTreeNode* pNode = new BinaryTreeNode();pNode->value = value;pNode->pLeft = NULL;pNode->pRight = NULL;return pNode;
}void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight){if(pParent != NULL){pParent->pLeft = pLeft;pParent->pRight = pRight;}
}void PrintTreeNode(BinaryTreeNode* pNode){if(pNode != NULL){printf("value of this node is: %d
", pNode->value);if(pNode->pLeft != NULL)printf("value of its left child is: %d
", pNode->pLeft->value);elseprintf("left child is null.
");if(pNode->pRight != NULL)printf("value of its right child is: %d
", pNode->pRight->value);elseprintf("right child is null.
");}else{printf("this node is null.
");}printf("
");
}void PrintTree(BinaryTreeNode* pRoot){PrintTreeNode(pRoot);if(pRoot != NULL){if(pRoot->pLeft != NULL)PrintTree(pRoot->pLeft);if(pRoot->pRight != NULL)PrintTree(pRoot->pRight);}
}void DestroyTree(BinaryTreeNode* pRoot){if(pRoot != NULL){BinaryTreeNode* pLeft = pRoot->pLeft;BinaryTreeNode* pRight = pRoot->pRight;delete pRoot;pRoot = NULL;DestroyTree(pLeft);DestroyTree(pRight);}
}
在二叉树中,每个结点都有两个指向子结点的指针. 在双向链表中, 每个结点也有两个指针,它们分别指向前一个结点和后一个结点.由于这两种结构的相似性, 同时二叉搜索树也是一种排过序的数据结构, 因此在理论上有可能实现二叉搜索树和排序的双向链表之间的转换. 下面的文件BST_to_DL.cpp将BST转换为排序过的双向链表,请参加代...