• 面试题10 二叉搜索树与双向链表 [ 树 ] [Very good!]


    题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。比如输入下图中左边二叉搜索树,则输出转换后的排序双向链表。
         10
        /  \
       6    14
      / \   / \
     4   8 12 16
    4=6=8=10=12=14=16
    将二叉搜索树转化为有序双向链表,类似于中序遍历,中序遍历的结果就是一个排序的数字。因此在程序中以中序遍历树,当遍历左子树到在叶子结点的时候,开始修改指针。 
    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    #include <stack>
    #include <deque>
    #include <queue>
    #include <bitset>
    #include <list>
    #include <map>
    #include <set>
    #include <iterator>
    #include <algorithm>
    #include <functional>
    #include <utility>
    #include <sstream>
    #include <climits>
    #include <cassert>
    #define BUG puts("here!!!");
    
    using namespace std;
    struct Node {
    	int value;
    	Node *lchild, *rchild;
    }; // 二叉搜索树转变为有序的双向链表
    void convert(Node* p, Node* &pLast) { // 中序遍历类似于用
    	if(p == NULL) return;
    	Node* pCur = p;
    	if(pCur->lchild) {
    		convert(pCur->lchild, pLast);
    	}
    	pCur->lchild = pLast;
    	if(pLast) pLast->rchild = pCur;
    	pLast = pCur;
    	if(pCur->rchild) convert(pCur->rchild, pLast);
    }
    Node* solve(Node* root) {
    	Node* pLast = NULL;
    	convert(root, pLast);
    	Node *pHead = pLast;
    	while(pHead && pHead->lchild) pHead = pHead->lchild;
    	return pHead;
    }
    int main() {
    	return 0;
    }
    


  • 相关阅读:
    Hive的mysql安装配置
    Linux下的MySQL安装
    Hive的安装与基础指令
    浅谈数据库和数据仓库
    Hive的学习之路(理论篇)
    Spring---bean的命名
    Spring---单例模式(Singleton)的6种实现
    Spring---加载配置文件的几种方法(org.springframework.beans.factory.BeanDefinitionStoreException)
    Spring---配置文件概述
    Spring---Bean生命周期
  • 原文地址:https://www.cnblogs.com/robbychan/p/3787166.html
Copyright © 2020-2023  润新知