.把二元查找树转变成排序的双向链表
【摘要】 参考地址为
//* Copyright(C) 2011 //*//* FUNCTION : TreeToLink//* DESCRIPTION : Tree to link//* PARAMETERS : Type Name Description//* RETURN : Type Values Description//* CREATED DATE/BY : 2...
-
//* Copyright(C) 2011
-
//*
-
//* FUNCTION : TreeToLink
-
//* DESCRIPTION : Tree to link
-
//* PARAMETERS : Type Name Description
-
//* RETURN : Type Values Description
-
//* CREATED DATE/BY : 2011/11/30 perfect2011
-
//*
-
//* REVISION HISTORY:V1.0
-
-
/*
-
1.把二元查找树转变成排序的双向链表
-
题目:
-
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
-
要求不能创建任何新的结点,只调整指针的指向。
-
-
10
-
/ /
-
6 14
-
/ / / /
-
4 8 12 16
-
-
转换成双向链表
-
4=6=8=10=12=14=16。
-
*/
-
-
#include "stdafx.h"
-
#include <iostream>
-
using namespace std;
-
-
-
struct TreeNode
-
{
-
int m_nValue; // value of node
-
TreeNode *m_pLeft; // left child of node
-
TreeNode *m_pRight; // right child of node
-
};
-
-
typedef TreeNode DoubleList;
-
DoubleList * pHead;
-
DoubleList * pListIndex;
-
-
//生成查找树
-
void adjust(TreeNode * & pCurrent, int value)
-
{
-
//根节点的处理,生成根节点,为pCurrent赋值 重点理解:注意为传址,修改了main内的pRoot
-
if(NULL == pCurrent)
-
{
-
TreeNode *pEnd = new TreeNode();
-
pEnd ->m_pLeft =NULL;
-
pEnd ->m_pRight = NULL;
-
pEnd ->m_nValue = value;
-
pCurrent = pEnd;
-
}
-
//
-
else
-
{ //在左子树添加
-
if (value<pCurrent->m_nValue)
-
{
-
adjust(pCurrent->m_pLeft,value);
-
}
-
//在右子树添加
-
else if(value>pCurrent->m_nValue)
-
{
-
adjust(pCurrent->m_pRight,value);
-
}
-
else
-
{
-
cout<<" 重 复 的 节 点 "<<endl;
-
}
-
-
}
-
-
}
-
-
void addList(TreeNode *pCurrent);
-
//covert the tree to link
-
void covertTreeToLink(TreeNode *pCurrent)
-
{
-
//中序读出
-
if(pCurrent==NULL)
-
{
-
return;
-
}
-
-
//遍历左子树
-
if(NULL != pCurrent->m_pLeft)
-
{
-
covertTreeToLink(pCurrent->m_pLeft);
-
}
-
-
//将根节点加进链表
-
addList(pCurrent);
-
-
//遍历右子树
-
if(NULL != pCurrent->m_pRight)
-
{
-
covertTreeToLink(pCurrent->m_pRight);
-
}
-
}
-
//添加节点到链表
-
void addList(TreeNode *pCurrent)
-
{
-
-
if(NULL ==pListIndex)
-
pHead = pListIndex;
-
else
-
{
-
pCurrent->m_pLeft = pListIndex;
-
pListIndex ->m_pRight = pCurrent;
-
pListIndex = pCurrent;//指针后移
-
}
-
cout<<"Now "<<pCurrent->m_nValue<<endl;
-
}
-
-
int main()
-
{ TreeNode * pRoot = NULL;
-
pListIndex = NULL;//链表的移动指针
-
pHead = NULL;//链表的头指针
-
adjust(pRoot, 10);
-
adjust(pRoot, 4);
-
adjust(pRoot, 6);
-
adjust(pRoot, 8);
-
adjust(pRoot, 12);
-
adjust(pRoot, 14);
-
adjust(pRoot, 15);
-
adjust(pRoot, 16);
-
covertTreeToLink(pRoot);
-
getchar();
-
return 0;
-
}
文章来源: gamwatcher.blog.csdn.net,作者:香菜聊游戏,版权归原作者所有,如需转载,请联系作者。
原文链接:gamwatcher.blog.csdn.net/article/details/7026968
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)