• 面试题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;
    }
    


  • 相关阅读:
    Oracle 12C 物理Standby 主备切换switchover
    Oracle 性能之 Enq: CF
    dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
    OGG 从Oracle备库同步数据至kafka
    WARNING: inbound connection timed out (ORA-3136)
    11G 新特性之 密码延迟认证
    org-mode 写 cnblogs 博客
    inner join, left join, right join, full outer join的区别
    Emacs 浏览网页
    服务器被攻击后当作矿机,高WIO
  • 原文地址:https://www.cnblogs.com/robbychan/p/3787166.html
Copyright © 2020-2023  润新知