微软等公司数据结构+算法面试100题(第1题)

来源:互联网 发布:阿里云服务器搭建 编辑:程序博客网 时间:2024/04/29 20:41
1.把二元查找树转变成排序的双向链表
 题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
    
  10
  / \
 6 14
 / \ / \

4 8 12 16

typedef struct BiTreeNode{int data;struct BiTreeNode *lChild,*rChild;}BiTreeNode;void ConvertToList(BiTreeNode* root,BiTreeNode* &first,BiTreeNode* &last){if(root == NULL){first  = NULL;last  = NULL;}BiTreeNode *lFirst,*lLast,*rFirst,*rLast;//分别为左右子树转换后的第一个和最后一个节点if(root->lChild ==  NULL && root->rChild = NULL)//二叉树只有一个根节点{first  = root;last = root;}else if(root->rChild == NULL) //右子树为空{ConvertToList(root->lChild,lFirst,lLast);first = lFirst;lLast->rChild = root;root->lChild = lLast;last = root;}else if(root->lChild == NULL) //左子树为空{ConvertToList(root->rChild,rFirst,rLast);//转换右子树first = root;root->rChild = rFirst;rFirst->lChild = root;last = rLast;}else{//左右子树均不为空,分别转换左右子树ConvertToList(root->lChild,lFirst,lLast);first = lFirst;lLast->rChild = root;root->lChild = lLast;ConvertToList(root->rChild,rFirst,rLast);last = rLast;root->rChild = rFirst;rFirst->lChild = root;}}


原创粉丝点击