剑指offer--4.重建二叉树
https://segmentfault.com/a/1190000008850005?utm_source=tag-newest#articleHeader11
https://www.cnblogs.com/love-yh/p/7423301.html二叉树种类
1.二叉树的高度
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None class Solution(object):
def maxHeight(self, root):
if root==None:
return 0
leftheight=self.maxHeight(root.left)
rightheight=self.maxHeight(root.right)
if leftheight>=rightheight:
return leftheight+1
else:
return rightheight+1
2. 分层打印二叉树
class TreeNode:
def __init__(self,x):
self.val = x
self.left = None
self.right = None class Solution:
def printBinary(self, root):
queue = []
res = []
if root = None:
return []
queue.append(root)
while queue:
newnode = queue.pop(0)
res.append(newnode.val)
if(newnode.left):
queue.append(newnode.left)
if(newnode.right):
queue.append(newnode.right)
return res
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
# write code here
result = []
nodeList = []
if pRoot == None:
return result
nodeList.append(pRoot)
while nodeList:
result_layer = []
nextLayernodeList = []
for node in nodeList:
result_layer.append(node.val)
if node.left:
nextLayernodeList.append(node.left)
if node.right:
nextLayernodeList.append(node.right)
nodeList = nextLayernodeList
result.append(result_layer)
return result
3. 判断是否为平衡二叉树
class TreeNode():
def __init__(self,x):
self.val = x
self.left = None
self.right = None
class Solution:
def getDeepth(self,Root):
if Root is None:
return 0
nright = self.getDeepth(Root.right)
nleft = self.getDeepth(Root.left)
return max(nright,nleft)+1
def IsBalance_solution(self,pRoot):
if pRoot is None:
return True
right = self.getDeepth(pRoot.right)
left = self.getDeepth(pRoot.left)
if abs(right - left) > 1:
return False
return self.IsBalance_solution(pRoot.right) and self.IsBalance_solution(pRoot.left)
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:1. 前序遍历首位是根节点,找到根节点之后,根据中序遍历找到左右子树
2. 把找到的根节点从pre里删除,分别找到1中的左右子树, preleft preright vinleft vinright
3. 然后左右子树带入1中
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function reConstructBinaryTree(pre, vin)
{
var result = null;
if(pre.length>1) {
var root= pre[0];
var vinrootindex = vin.indexOf(root);
var vinleft = vin.slice(0,vinrootindex);
var vinright = vin.slice(vinrootindex+1,vin.length);
pre.shift();
var preleft = pre.slice(0,vinleft.length);
var preright = pre.slice(vinleft.length,pre.length);
result = {
val : root,
left : reConstructBinaryTree(preleft,vinleft),
right : reConstructBinaryTree(preright,vinright)
}
}
else if(pre.length===1) {
result={
val: pre[0],
left: null,
right: null
}
}
return result;
}
4. 重建二叉树
-*- coding:utf-8 -*-
# 先序遍历特点:第一个值是根节点
# 中序遍历特点:根节点左边都是左子树,右边都是右子树
# 思路:
# 1.首先根据根节点a将中序遍历划分为两部分,左边为左子树,右边为右子树
# 2.使用递归,左右子树再次;;;
# 最后合成一棵树
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None class Solution:
def Re(self,pre,tin):
if not pre or not tin:
return None #要求返回的是二叉树,不是数组
root = TreeNode(pre.pop(0))
index = tin.index(root.val)
root.left = self.Re(pre, tin[:index])
root.right = self.Re(pre, tin[index+1:])
return root
5. 二叉树的镜像
#交换所有非页节点的子节点
-*- coding:utf -8 -*-
class TreeNode:
def __init__(self,x):
self.value = x
self.left = None
self.right = None
class Solution:
def Mirror(self,root):
if not root:
return root
root.left, root.right = root.right, root.left
self.Mirror(root.left)
self.Mirror(root.right)
return root
剑指offer--4.重建二叉树的更多相关文章
- 剑指Offer:重建二叉树【7】
剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5 ...
- 《剑指offer》重建二叉树
本题来自<剑指offer> 重构二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2 ...
- 【Java】 剑指offer(6) 重建二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的 ...
- Go语言实现:【剑指offer】重建二叉树
该题目来源于牛客网<剑指offer>专题. 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4 ...
- 剑指OFFER之重建二叉树(九度OJ1385)
题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...
- 剑指offer:重建二叉树
重建二叉树的前置知识: 0.遍历二叉树: (1)前序遍历:根左右 --> 先访问根节点,再前序遍历左子树,最后前序遍历右子树: (2)中序遍历:左根右 --> 先中序遍历左子树,再访问根节 ...
- 剑指Offer 4. 重建二叉树 (二叉树)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 【剑指offer】重建二叉树
一.题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...
- 剑指offer——04重建二叉树(Python3)
思路:在数据结构中,有一个条件反射,谈及二叉树,就递归.所以在实现重建二叉树时,也应该用到递归的思想. 在前序遍历中,根节点处于第一个:在中序遍历中,根节点的左边为左子树节点,根节点右边为右子树节点. ...
- 剑指offer——05重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
随机推荐
- [20170612]FOR ALL COLUMNS SIZE repeat(12c).txt
[20170612]FOR ALL COLUMNS SIZE repeat(12c).txt --//昨天看了https://jonathanlewis.wordpress.com/2017/06/0 ...
- 光盘yum源搭建
先修改基本的yum原源,使其不生效 cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak 在修改媒介yum源使其生效 检验是否生效 ...
- win8.1安装win64_11gR2_database_2of2 【INS-13001]】环境不满足最低要求问题
1. 如图问题: 2. 修改 database\stage\cvu\cvu_prereq.xml, 添加windows 8.1 <OPERATING_SYSTEM RELEASE="6 ...
- 如何设置可以避免php代码中的中文在浏览器中成为乱码?
其实很简单,只需要在代码开始的前面加上一条这样的语句就行: //这里面我的浏览器中的字符编码格式为utf-8,所以这里我设置为utf-8,如果你的浏览器中的默认编码不是这个,请选择浏览器默认的编码格式 ...
- vim 高亮
vim 高亮显示所选单词在文中全部出现的地方: ’g' + 'd'
- Nginx使用教程(八):使用Nginx缓存之Memcached缓存
使用Memcache <br\>Memcache是一个通用的内存缓存系统. 它通常用于加速缓慢的数据访问. NGINXmemcached模块提供各种指令,可以配置为直接访问Memcache ...
- 学习RabbitMQ(三):AMQP事务机制
本文转自:http://m.blog.csdn.net/article/details?id=54315940 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的 ...
- display:table-cell几种应用
http://www.zhangxinxu.com/wordpress/2010/10/%E6%88%91%E6%89%80%E7%9F%A5%E9%81%93%E7%9A%84%E5%87%A0%E ...
- SQL 服务器 - RDBMS
SQL 数据类型 SQL functions 现代的 SQL 服务器构建在 RDBMS 之上. DBMS - 数据库管理系统(Database Management System) 数据库管理系统是一 ...
- ssm框架的整合搭建(三)
mybatis逆向工程工具类的使用---mybatis generator 项目结构 配置文件 <?xml version="1.0" encoding="UTF ...