面试训练二叉搜索树建双向链表
2012-09-10 11:12
183 查看
这种题目看到的时候 ,我想的第一感觉 就是中序遍历二叉树。
但是至于链表如何来建,确实有些难度。要是不看书,真心搞不定。
采用的方法 是中序遍历 对吧 递归后 左子树 最后一个节点时 8 此时根结点为10 ,还未进入右子树递归。
那么只需将8和10建立链表,那么右子树如何处理呢,必须要有前一个节点10,才能够进入,同时因为是中序吧,遍历到最后面的节点时12 ,此时如果上一个节点时10那么肯定可以连起来,想想看,中序遍历 不是刚好10以后输出的12么,因此这里就有料了。
至于料是什么 当然是每次中序的递归遍历 保存上一个节点。并且左子树最后一个节点需要和根结点建立关系。
soga ,来coding了
#include "stdio.h" typedef struct Node{ int key; struct Node *left; struct Node *right; }Lnode; void buildTree(Lnode **head) { Lnode *p=NULL; int value; scanf("%d",&value); if(value ==-1) { *head=NULL; } else { p = (Lnode *)malloc(sizeof(Lnode)); p->key = value; *head=p; buildTree(&((*head)->left)); buildTree(&((*head)->right)); } return; } void traverse(Lnode *p) { if(p==NULL) return; printf("%d ",p->key); traverse(p->left); traverse(p->right); } void traverseList(Lnode *p) { while(p!=NULL) { printf("%d ",p->key); p=p->right; } } void convertList(Lnode *head,Lnode **lastNode) { Lnode *current = head; if(head == NULL) return; if(head->left) convertList(head->left,lastNode); head->left = *lastNode; if(*lastNode != NULL) (*lastNode)->right=head; *lastNode=current; if(head->right) convertList(head->right,lastNode); } Lnode *buildDouble(Lnode *head) { Lnode *lastNode = NULL; Lnode *p=NULL; convertList(head,&lastNode); p=lastNode; while(p->left != NULL) { p=p->left; } return p; } int main() { Lnode *head=NULL; Lnode *listHead=NULL; int totalNum= 10; int index =0; int value=0; buildTree(&head); traverse(head); printf("\n"); listHead = buildDouble(head); traverseList(listHead); printf("\n"); return 0; }
这道题考察的非常好
1 递归
2 树
3 遍历
这三个性质结合起来考,真心的给力
相关文章推荐
- 【剑指Offer面试编程题】题目1503:二叉搜索树与双向链表--九度OJ
- 【剑指Offer面试编程题】题目1503:二叉搜索树与双向链表--九度OJ
- 微软面试100题---将 二叉搜索树 转化成 有序的双向链表
- 面试经典(24)--二叉搜索树和双向链表
- 二叉搜索树与双向链表 【微软面试100题 第一题】
- 二叉搜索树与双向链表 【微软面试100题 第一题】
- 二叉搜索树与双向链表的转换
- 二叉搜索树转换为双向链表
- 面试题:二叉搜索树与双向链表
- 码农小汪-剑指Offer之24 -二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- 二叉搜索树转换为有序双向链表
- 链表节点面试100题系列之1将查找二叉树转换成有序的双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树变成有序双向链表,要求不能创建新的结点,只调整指针的指向
- 剑指offer-面试题27.二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 剑指Offer——二叉搜索树与双向链表