#include <deque>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;
struct BinaryTreeNode
{
int m_value;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
void CreateBinaryTree(BinaryTreeNode* &T)
{
int value;
cin>>value;
if(value == -1)
return;
else
{
BinaryTreeNode *t;
t=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
t->m_value=value;
t->m_pLeft=NULL;
t->m_pRight=NULL;
T=t;
CreateBinaryTree(T->m_pLeft);
CreateBinaryTree(T->m_pRight);
}
}
void inorder(BinaryTreeNode * &pTree)
{
if(pTree)
{
cout<<pTree->m_value<<" ";
inorder(pTree->m_pLeft);
inorder(pTree->m_pRight);
}
}
void ConvertNode(BinaryTreeNode* pTree, BinaryTreeNode** plastNode)
{
BinaryTreeNode* pCurrent = pTree;
if(pCurrent->m_pLeft)
{
ConvertNode(pCurrent->m_pLeft, plastNode);
}
pCurrent->m_pLeft = *plastNode;
if(*plastNode != NULL)
(*plastNode)->m_pRight = pCurrent;
*plastNode = pCurrent;
if(pCurrent->m_pRight)
ConvertNode(pCurrent->m_pRight, plastNode);
}
BinaryTreeNode* Convert(BinaryTreeNode* pTree)
{
if(pTree == NULL)
return NULL ;
BinaryTreeNode* plastNode =NULL;
ConvertNode(pTree, &plastNode);
while(plastNode->m_pLeft != NULL )
{
// cout<<plastNode->m_value<<" ";
plastNode =plastNode->m_pLeft;
}
return plastNode;
}
void printListNode(BinaryTreeNode* pListNode)
{
if(pListNode == NULL)
return;
while(pListNode != NULL)
{
cout<<pListNode->m_value<<" ";
pListNode = pListNode->m_pRight;
}
}
int main()
{
BinaryTreeNode *pTree = NULL;
BinaryTreeNode *p;
CreateBinaryTree(pTree);
//inorder(pTree);
p = Convert(pTree);
printListNode(p);
return 0;
}
面试题27:二叉搜索树与双向链表
最新推荐文章于 2022-05-13 21:54:01 发布