下载后可任意编辑算法面试题总结下载后可任意编辑1 算法面试题总结1
把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
要求不能创立任何新的结点,只调整指针的指向
10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16
解:首先我们定义的二元查找树 节点的数据结构如下: typedef struct tree{ int data; // value of node struct tree *left; // left child of node下载后可任意编辑 struct tree *right; // right child of node}*ptree; ptree f(ptree root,int sign)//sign==0 返回链头,sign==1 返回链尾{ //main 函数中调用 f(root,0);ptree p=root;if(p->left) //假如左子树非空{p->left = f(p->left,1);//第 4 个参数为,表明f 函数返回 root 左子树中根的链尾p->left->right = p; //双链表中 left 记录前驱,right 记录后继}if(p->right) {p->right=f(p->right,0);p->right->left = p; }if(sign==0) while(p->left) p=p->left ;//顺着 left找到双链表首元素下载后可任意编辑else while(p->right)p=p->right;//顺着right 找到双链表尾元素return p;}2
设计包含 min 函数的栈
定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素
要求函数 min、push 以及