二元查找树转变成排序的双向链表
来源:互联网 发布:随机出题软件破解 编辑:程序博客网 时间:2024/05/22 06:16
题目来源:http://bbs.csdn.net/topics/350118968
1.把二元查找树转变成排序的双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
思路:首先构建一个二叉排序树,中序遍历整棵树。按照这个方式遍历树,比较小的结点先访问。如果我们每访问一个结点,假设之前访问过的结点已经调整成一个排序双向链表,我们再把调整当前结点的指针将其链接到链表的末尾。当所有结点都访问过之后,整棵树也就转换成一个排序双向链表了。
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;struct TreeNode{ int nValue; TreeNode *left; TreeNode *right;};typedef TreeNode DoubleList;DoubleList * pHead = NULL;DoubleList * pListIndex = NULL;//建立二叉排序树void addTreeNode(TreeNode *¤t, int value){ if(current == NULL) { TreeNode *tree = new TreeNode(); tree->left = NULL; tree->right = NULL; tree->nValue = value; current = tree; } else { if((current->nValue) > value) addTreeNode(current->left, value); else if((current->nValue) < value) addTreeNode(current->right, value); else cout << "重复节点" << endl; }}//修改二叉树的指针指向void changeList(TreeNode *current){ current->left = pListIndex; if(NULL != pListIndex) pListIndex->right = current; else pHead = current; pListIndex = current; cout << current->nValue << endl;}//中序遍历void travel(TreeNode *head){ if(head == NULL) return; if(head->left != NULL) travel(head->left); changeList(head); if(head->right != NULL) travel(head->right);}int main(){ TreeNode *Root = NULL; int t; addTreeNode(Root, 10); addTreeNode(Root, 4); addTreeNode(Root, 6); addTreeNode(Root, 8); addTreeNode(Root, 12); addTreeNode(Root, 14); addTreeNode(Root, 15); addTreeNode(Root, 16); travel(Root); return 0;}
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 1.二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- .把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 图片相关操作
- i386 段式管理与页式管理
- 幼儿早教软件,儿童早教,儿童舞蹈,儿童视频软件
- windows下使用vc2008编译librtmp
- Poj 3046(dp)
- 二元查找树转变成排序的双向链表
- 不是走上蜕变的道路,就是死在迷茫的途中
- Dynamics CRM 2011编程系列(60):JS编程之CRUD辅助类(JQuery版)
- 获取表单控件原始(初始)值
- 关于RegQueryValueEx两个小问题
- 黑马程序员_Java中的数组基础
- mysql_real_connect 线程安全问题
- 马尔科夫链简介
- .NET Framework各版本操作系统支持