面试训练二叉搜索树建双向链表
来源:互联网 发布:五十知天命 英文翻译 编辑:程序博客网 时间:2024/05/22 05:40
这种题目看到的时候 ,我想的第一感觉 就是中序遍历二叉树。
但是至于链表如何来建,确实有些难度。要是不看书,真心搞不定。
采用的方法 是中序遍历 对吧 递归后 左子树 最后一个节点时 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 遍历
- 面试训练二叉搜索树建双向链表
- IMWeb提升营Day5 | 训练题26:二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树转为双向链表
- 二叉搜索树和双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- Inside Qt Series (一):Let’s go, Starting From the QObject
- 博饼结果判断的正则表达式
- gsensor架构和原理分析
- Mathematica运算
- android 分享功能
- 面试训练二叉搜索树建双向链表
- IO系统性能之一:衡量性能的几个指标
- gen already exists but is not a source folder. Convert to a source folder or rename it
- 解决局域网调用服务器文件执行时出现的安全警告窗口
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- java命名规则
- 杭电acm Problem3120 Dolphin
- 手机硬件电路英文缩写
- WTL,ATL与MFC之比较