Cracking-- 17.13 将二叉树转换成双向链表
在书的105页
使用中根遍历的思想
left 之后 为 root 之后 为 right
则对左子树来说
left->right = root; root->left = left;
对右子树来说
root->right = right-> -> -> left;
left->left 为根的根 的根
而right->left 则为直接的根
#include <iostream>
#include <vector> using namespace std; struct node {
int val;
node *left;
node *right;
node(int _val){
val = _val;
left = NULL;
right = NULL;
}
}; node* change(node *root)
{
if(root == NULL)
return NULL; node *retNode = NULL;
if(root->left == NULL && root->right == NULL)
{
return root;
} if(root->left)
{
retNode = change(root->left );
retNode->right = root;
root->left = retNode;
retNode = root;
} if(root->right)
{
retNode = change(root->right); node* tmp = retNode;
while(tmp->left)
tmp = tmp->left;
root->right = tmp; tmp->left = root;
} return retNode;
}
int main()
{
node *n1 = new node();
node *n2 = new node();
node *n3 = new node();
node *n4 = new node();
node *n5 = new node();
node *n6 = new node();
node *n7 = new node();
n1->left = n2;
n1->right = n3; n2->left = n4;
n2->right = n5;
n3->left = n6;
n3->right = n7; node *ans;
ans = change(n1);
return ;
}
Cracking-- 17.13 将二叉树转换成双向链表的更多相关文章
- 二叉树转换成森林&森林变成二叉树
一,树转换成二叉树 1,将全部兄弟结点连起来; 2,保留第一个兄弟结点与父节点的连接,断开其它兄弟结点与父节点的连接,然后以根节点为轴依照顺时针方向旋转45度 watermark/2/text/aHR ...
- C# 13位时间戳转换成标准时间C#代码
原地址:https://www.cnblogs.com/yixuehan/p/5559244.html /// <summary> /// 时间戳转换成标准时间 /// </summ ...
- 【遍历二叉树】11把二叉树转换成前序遍历的链表【Flatten Binary Tree to Linked List】
本质上是二叉树的root->right->left遍历. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- Interview----将一棵二叉树转换成其镜像
题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点. 用递归和循环两种方法完成树的镜像转换. 例如输入: 8 / ...
- java把13位时间戳转换成"yyyy-MM-dd HH:mm:ss"格式,工具类
public static void main(String[] args) { String time = System.currentTimeMillis();//获取当前时间精确到毫秒级的时间戳 ...
- leetcode 114二叉树转换成链表
解法一 可以发现展开的顺序其实就是二叉树的先序遍历.算法和 94 题中序遍历的 Morris 算法有些神似,我们需要两步完成这道题. 将左子树插入到右子树的地方 将原来的右子树接到左子树的最右边节点 ...
- OpenCV 学习笔记(13)图像转换成视频
关键 1参数里的分辨率是图像本身的分辨率,而不是指定生成的视频分辨率.如果要修改分辨率,要么后期软件处理,要么读图的时候resize 2要正常退出,不要强制退出. 3生成的只能是avi格式. #inc ...
- lintcode:将二叉查找树转换成双链表
题目 将一个二叉查找树按照中序遍历转换成双向链表 给定一个二叉查找树: 4 / \ 2 5 / \ 1 3 返回 1<->2<->3<->4<->5. ...
- LintCode-378.将二叉查找树转换成双链表
将二叉查找树转换成双链表 将一个二叉查找树按照中序遍历转换成双向链表. 样例 给定一个二叉查找树: 返回 1<->2<->3<->4<->5. 标签 链 ...
随机推荐
- sqlite3 转义字符
SqLite数据库的单引号转义是用单引号转义,并不是常用的"/" 参考:http://blog.csdn.net/qingflyer/article/details/6372498 ...
- eclipse连接外部tomcat进行debug
首先,在tomcat/bin目录下找到编辑catalina.bat,在 rem $Id: catalina.bat 1344732 2012-05-31 14:08:02Z kkolinko $rem ...
- Error:(1, 1) error: illegal character: \65279解决方法
NotePad++,选择格式,选择转为UTF-8无BOM格式,即可解决,感谢http://tzwzero-163-com.iteye.com/blog/1696605
- Head First Html and CSS学习笔记之HTML
初学前端开发,记录下自己的学习笔记. 第一章 认识HTML 1:关于HTML HTML是超文本标记语言(HyperText Markup Language)的缩写,用来建立网页的结构. 它只会根据标记 ...
- SECD machine简介
secd machine是一种比较基础的虚拟机设计.一般是作为函数式语言的底层虚拟机. secd machine的"secd"四个字母分别指的是这种虚拟机的核心Stack, Env ...
- linux学习笔记——基础命令
最近看了一些老男孩linux运维视频,挺不错的,特此记录一下 linux组成 gun组件 shell等 linux内核 其他软件 linux主要内核: linux kernel2.2 linux ke ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用Spring Framework开发自己的应用程序
1.直接基于spring framework开发自己的应用程序: 1.1参考资料: Spring官网spring-framework.4.3.5.RELAESE的Reference Documenta ...
- 【&】位与运算符【|】位或运算符之权限控制算法
[&]位与运算符: 按位与运算符"&"是双目运算符. 其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数 ...
- Redis GetTypedClient
C#操作Redis 未包含GetTypedClient定义 原创,转载请注明出处. VS版本:2015 用NuGet安装了Redis的包 按照百度的各种教程来操作,但是发现网上下载的DEMO可以正 ...
- PHP读取Excel数据写入数据库(包含图片和文字)
public function test(){ $exts = 'xlsx'; //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org ...