acwing 49. 二叉搜索树与双向链表
地址:https://www.acwing.com/problem/content/87/
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点,只能调整树中结点指针的指向。
注意:
- 需要返回双向链表最左侧的节点。
例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。
解法
树的处理 一半都是递归 分为 根 树的左子树 和树的右子树
子树也是一棵树 进行递归处理 向上返回一个双链表 返回链表的头尾
最后全部转化链表
代码
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- class Solution {
- public:
- TreeNode* rethead = NULL;
- TreeNode* gleft = NULL;
- TreeNode* gright = NULL;
- void convertInner(TreeNode* root)
- {
- if (NULL == root) return;
- if (root->val < rethead->val) rethead = root;
- if (root->left == NULL && root->right == NULL) {
- gleft = root; gright = root;
- return;
- }
- else if (root->left != NULL && root->right == NULL) {
- convertInner(root->left);
- gright->right = root;
- root->left = gright;
- gright = root;
- }
- else if (root->right != NULL && root->left == NULL) {
- convertInner(root->right);
- gleft->left = root;
- root->right = gleft;
- gleft = root;
- }
- else if (root->right != NULL && root->left != NULL) {
- convertInner(root->left);
- gright->right = root;
- root->left = gright;
- TreeNode* leftcopy = gleft;
- convertInner(root->right);
- gleft->left = root;
- root->right = gleft;
- gleft = leftcopy;
- }
- }
- TreeNode* convert(TreeNode* root) {
- if (NULL == root) return NULL;
- rethead = root;
- if (root->left == NULL && root->right == NULL) return root;
- if (root->left != NULL && root->right == NULL) {
- convertInner(root->left);
- gright->right = root;
- root->left = gright;
- }
- else if (root->right != NULL && root->left == NULL) {
- convertInner(root->right);
- gleft->left = root;
- root->right = gleft;
- }
- else if (root->right != NULL && root->left != NULL) {
- convertInner(root->left);
- gright->right = root;
- root->left = gright;
- convertInner(root->right);
- gleft->left = root;
- root->right = gleft;
- }
- return rethead;
- }
- };
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- class Solution {
- public:
- TreeNode* rethead = NULL;
- TreeNode* gleft = NULL;
- TreeNode* gright = NULL;
- void convertInner(TreeNode* root)
- {
- if (NULL == root) return;
- if (root->val < rethead->val) rethead = root;
- if (root->left == NULL && root->right == NULL) {
- gleft = root; gright = root;
- return;
- }
- else if (root->left != NULL && root->right == NULL) {
- convertInner(root->left);
- gright->right = root;
- root->left = gright;
- gright = root;
- }
- else if (root->right != NULL && root->left == NULL) {
- convertInner(root->right);
- gleft->left = root;
- root->right = gleft;
- gleft = root;
- }
- else if (root->right != NULL && root->left != NULL) {
- convertInner(root->left);
- gright->right = root;
- root->left = gright;
- TreeNode* leftcopy = gleft;
- convertInner(root->right);
- gleft->left = root;
- root->right = gleft;
- gleft = leftcopy;
- }
- }
- TreeNode* convert(TreeNode* root) {
- if (NULL == root) return NULL;
- rethead = root;
- if (root->left == NULL && root->right == NULL) return root;
- if (root->left != NULL && root->right == NULL) {
- convertInner(root->left);
- gright->right = root;
- root->left = gright;
- }
- else if (root->right != NULL && root->left == NULL) {
- convertInner(root->right);
- gleft->left = root;
- root->right = gleft;
- }
- else if (root->right != NULL && root->left != NULL) {
- convertInner(root->left);
- gright->right = root;
- root->left = gright;
- convertInner(root->right);
- gleft->left = root;
- root->right = gleft;
- }
- return rethead;
- }
- };
acwing 49. 二叉搜索树与双向链表的更多相关文章
- 剑指Offer面试题:25.二叉搜索树与双向链表
一.题目:二叉搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.比如输入下图中左边的二叉搜索树,则输出转换之后的 ...
- 剑指offer 二叉搜索树与双向链表
html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...
- 剑指offer 二叉搜索树和双向链表
剑指offer 牛客网 二叉搜索树和双向链表 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 18:58:36 2019 ...
- 【IT笔试面试题整理】二叉搜索树转换为双向链表
[试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...
- 《剑指offer》— JavaScript(26)二叉搜索树与双向链表
二叉搜索树与双向链表 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 思路 递归思想:把大问题转换为若干小问题: 由于Ja ...
- 《剑指offer》第三十六题(二叉搜索树与双向链表)
// 面试题36:二叉搜索树与双向链表 // 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求 // 不能创建任何新的结点,只能调整树中结点指针的指向. #include < ...
- 编程算法 - 二叉搜索树 与 双向链表 代码(C++)
二叉搜索树 与 双向链表 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目:输入一颗二叉搜索树, 将该二叉搜索树转换成一个排序的双向链表. 要求 ...
- 【剑指offer】二叉搜索树转双向链表,C++实现
原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...
- 剑指Offer - 九度1503 - 二叉搜索树与双向链表
剑指Offer - 九度1503 - 二叉搜索树与双向链表2014-02-05 23:39 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树 ...
随机推荐
- Java并发面试问题,谈谈你对AQS的理解
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- spring的事物管理配置
基于注解的事务管理器配置(AOP) 首先要引入AOP和TX的名称控件 <!-- 使用annotation定义事务 --> <tx:annotation-driven transact ...
- [转]UiPath Keyboard Shortcuts
本文转自:https://docs.uipath.com/studio/docs/keyboard-shortcuts The complete list of keyboard shortcuts ...
- 在服务器的tomcat中部署手机apk项目,浏览器或手机下载不能根据URL下载和安装apk文件
Android的APK包不能下载或安装,需在tomcat的web.xml加入 <mime-mapping> <extension>apk</extensio ...
- 12c Data guard Switchover Best Practices using SQLPLUS (Doc ID 1578787.1)
12c Data guard Switchover Best Practices using SQLPLUS (Doc ID 1578787.1) APPLIES TO: Oracle Databas ...
- springmvc+mybatis需要的jar包与详解
https://www.cnblogs.com/luohengstudy/p/7772109.html
- c++ LeetCode(初级数组篇)十一道算法例题代码详解(一)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10940636.html 唉!最近忙着面试找实习,然后都是面试的很多是leetcode的算法题, ...
- Kafka基本知识整理
首先Kafka是一个分布式消息队列中间件,Apache顶级项目,https://kafka.apache.org/ 高性能.持久化.多副本备份.横向扩展. 生产者Producer往队列里发送消息, ...
- RabbitMQ的高级特性概念理解
1.RabbitMQ中的消息如何保障百分之百的投递成功? 答:百分之百的投递成功,方案可以参考下面的2.3. 2.什么是生产者端的可靠性投递? 答:第一步,生产者保障消息的成功发出.第二步,保障Rab ...
- SAP 表汇总
SAP 表整理:VBKPF-预制凭证抬头表: VBKPF-预制凭证抬头表 VBKPF-预制凭证抬头表 VBSEG-预制凭证行项目表: VBSEG-预制凭证行项目表 VBSEG-预制凭证行项目表 VBS ...