1. BST树转化为双向链表

/*
 * -*- coding: utf-8 -*-
 * micro.cpp
 *
 *  Created on: 2014年3月31日
 *      Author: szk
 *      todo:算法第1题-BSTtreeToDoubleList
 */
// 1. 定义BST树节点node的结构;
// 2. 创建BST树;
// 3. 遍历BST;
// 4. bst转成list;
#include <iostream>
using namespace std;
struct BSTtreeNode{
	int value;
	BSTtreeNode *left;
	BSTtreeNode *right;
};
BSTtreeNode *head;
BSTtreeNode *pIndex;
void createBSTtreeNode(BSTtreeNode *¤tNode, int value)
{
	if (currentNode == NULL)
	{
		BSTtreeNode *pBTree = new BSTtreeNode();
		pBTree->value = value;
		pBTree->left = NULL;
		pBTree->right = NULL;
		currentNode = pBTree;
	}
	else
	{
		if(currentNode->value > value)
		{
			createBSTtreeNode(currentNode->left, value);
		}
		else if(currentNode->value < value)
		{
			createBSTtreeNode(currentNode->right, value);
		}
		else
			cout << "输入重复节点" << endl;
	}
}
void addToDupList(BSTtreeNode *currentNode)
{
	BSTtreeNode *tmpNode = NULL;
	tmpNode = currentNode;
	if(head == NULL)
	{
		head = tmpNode;
		pIndex= head;
	}
	else
	{
		pIndex->right = tmpNode;
		tmpNode->left = pIndex;
		pIndex = tmpNode;
	}
	cout << pIndex->value << endl;
}
void InOrderReverseBSTtree(BSTtreeNode *currentNode)
{
	if(currentNode)
	{
		InOrderReverseBSTtree(currentNode->left);
		addToDupList(currentNode);
		InOrderReverseBSTtree(currentNode->right);
	}
}
void testBSTtreeToDoubleList()
{
	BSTtreeNode *root = NULL;
	head = NULL;
	pIndex = NULL;
	createBSTtreeNode(root, 10);
	createBSTtreeNode(root, 4);
	createBSTtreeNode(root, 6);
	createBSTtreeNode(root, 8);
	createBSTtreeNode(root, 12);
	createBSTtreeNode(root, 14);
	createBSTtreeNode(root, 15);
	createBSTtreeNode(root, 16);
	InOrderReverseBSTtree(root);
}
int main(void)
{
	testBSTtreeToDoubleList();
	return 0;
这个算法从思路上来讲比较简单,因为要生成结果是有序的双向链表有没有告诉不允许新开空间所以最简单的思路莫过于:中序遍历bst树,每输出一个节点便将其添加到双向链表中。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值