1

1、题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。

输入:
Paste_Image.png
输出:

1<=>2<=>3<=>4<=>5<=>6<=>7

解题思路:

利用二叉树的中序遍历,不断向空的双向链表中插入(改变lchild和rchild指针)新结点。

代码:
#include "stdafx.h"
#include "stdlib.h"
typedef struct TreeNode{
    char value;
    struct TreeNode * LeftChild;
    struct TreeNode * RightChild;
}TreeNode,*Tree;
int flag=0;//判断是否为链表的首结点
Tree first,tail;//分别指向链表头结点和尾结点的指针
/*****创建二叉树*****/
Tree CreatTree()
{   
    char value;
    TreeNode * Node;
    scanf("%c",&value);
    if(value=='#')
        Node=NULL;
    else{
        Node=(TreeNode *)malloc(sizeof(TreeNode));
        Node->value=value;
        Node->LeftChild=CreatTree();
        Node->RightChild=CreatTree();
}
    return Node;

}
/*****创建链表*****/
void Link(Tree tree)
{
    if(flag==0) //flag==0,Link函数第一次被调用,此时链表为空
    {
        flag=1;
        tail=first=tree;
        tail->LeftChild=first->LeftChild=NULL;
        tail->RightChild=first->RightChild=NULL;
    }
    else
    {
        tail->RightChild=tree; 
        tree->LeftChild=tail;   //在创建链表过程中,改变了当前结点的左孩子指针,虽然破坏了二叉树的结构,但不影响其后续的中序遍历。
        tail=tree;
    }
}

void MiddleTravel(Tree tree)
{
    if(tree)
    {    
        MiddleTravel(tree->LeftChild);
        Link(tree);
        MiddleTravel(tree->RightChild);
    }
}
void Print()
{
    Tree n;
    n=first;
    while(n)
    {
        printf("%c\t",n->value);
        n=n->RightChild;
    }
}
int _tmain(int argc, _TCHAR* argv[])
{  
    Tree tree;
    int high;
    printf("输入二叉树节点:");
    tree=CreatTree();
    printf("\n排序后:");
    MiddleTravel(tree);
    Print();
    system("PAUSE");
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,149评论 0 11
  • 剑指offer 最近在牛客网上刷剑指offer的题目,现将题目和答案(均测试通过)总结如下: 二维数组的查找 替换...
    闫阿佳阅读 4,509评论 0 10
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 14,585评论 0 25
  • 1、线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表,这种线性表只能在固定的...
    雾熏阅读 7,120评论 0 10
  • 参考链接 基本数据结构:链表(list) 线性表 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元...
    梦即是幻阅读 3,508评论 0 3