• 剑指offer-面试题36-二叉搜索树与双向链表-中序遍历


    /*
    题目:
    	将二叉搜索树转化为排序的双向链表,不能创建新的节点,
    	只能调整节点的指向,返回双向链表的头节点。
    */
    /*
    思路:
    	递归。
    	二叉搜索树的中序遍历得到的序列是递增序列。
    	左子树left<=>root<=>右子树right。
    	左链表left<=>root<=>右链表right。
    	对于左链表,我们需要它的最后一个节点;对于右链表,我们需要它的第一个节点。
    	我们设置一个公共节点表示lastNode,函数返回firstNode。
    	将root节点跟在做链表后,将右链表跟在root节点之后,则得到最终结果。
    */
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<cmath>
    #include<stdio.h>
    #include<vector>
    #include<stack>
    #include<queue>
    
    using namespace std;
    
    struct TreeNode {
    	int val;
    	struct TreeNode *left;
    	struct TreeNode *right;
    	TreeNode(int x) :
    			val(x), left(NULL), right(NULL) {
    	}
    };
    
    TreeNode* lastNode = nullptr;
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree == nullptr || (pRootOfTree->left == nullptr && pRootOfTree->right == nullptr)) {
           lastNode = pRootOfTree;
           return pRootOfTree;
        }
        TreeNode* left = Convert(pRootOfTree->left);
        if(left != nullptr){
            lastNode->right = pRootOfTree;
            pRootOfTree->left = lastNode;
        }
        TreeNode* right = Convert(pRootOfTree->right);
        if(right != nullptr){
            pRootOfTree->right = right;
            right->left = pRootOfTree;
        }
        lastNode = (right == nullptr) ? pRootOfTree : right;
        return (left == nullptr)? pRootOfTree : left;
    
    }
    

       

  • 相关阅读:
    HTML事件处理程序---内联onclick事件
    js的width函数
    了解跨站请求伪造CSRF
    离线百度地图
    GetOverlappedResult 函数
    OVERLAPPED 结构
    SetupDi系列函数
    Linux 各个命令的缩写原型
    Linux grep命令
    Linux if[......] then ......else...... fi
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/11960178.html
Copyright © 2020-2023  润新知