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.重建二叉树的更多相关文章

  1. 剑指Offer:重建二叉树【7】

    剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5 ...

  2. 《剑指offer》重建二叉树

    本题来自<剑指offer> 重构二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2 ...

  3. 【Java】 剑指offer(6) 重建二叉树

    本文参考自<剑指offer>一书,代码采用Java语言.  更多:<剑指Offer>Java实现合集 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的 ...

  4. Go语言实现:【剑指offer】重建二叉树

    该题目来源于牛客网<剑指offer>专题. 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4 ...

  5. 剑指OFFER之重建二叉树(九度OJ1385)

    题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...

  6. 剑指offer:重建二叉树

    重建二叉树的前置知识: 0.遍历二叉树: (1)前序遍历:根左右 --> 先访问根节点,再前序遍历左子树,最后前序遍历右子树: (2)中序遍历:左根右 --> 先中序遍历左子树,再访问根节 ...

  7. 剑指Offer 4. 重建二叉树 (二叉树)

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  8. 【剑指offer】重建二叉树

    一.题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...

  9. 剑指offer——04重建二叉树(Python3)

    思路:在数据结构中,有一个条件反射,谈及二叉树,就递归.所以在实现重建二叉树时,也应该用到递归的思想. 在前序遍历中,根节点处于第一个:在中序遍历中,根节点的左边为左子树节点,根节点右边为右子树节点. ...

  10. 剑指offer——05重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

随机推荐

  1. Multiple Server Query Execution报The result set could not be merged..

    在SQL Server中使用Multiple Server Query Execution这个功能做数据库维护或脚本发布时非常方便,昨天由于磁盘空间原因,删除清理了大量的软件和组件,结果导致SSMS客 ...

  2. mysql执行语句提示Table 'performance_schema.session_variables' doesn't exist

    用管理员身份cmd进入mysql安装目录bin里,执行 mysql_upgrade -u root -p 如果杀毒软件拦截,添加为信任区

  3. Spring MVC HelloWorld入门及运行机制 (一)

    完整的项目案例: springmvc.zip 介绍 SpringMVC是一款Web MVC框架. 它跟Struts框架类似,是目前主流的Web MVC框架之一. 文章通过实例来介绍SpringMVC的 ...

  4. OkHttp简单使用

    OkHttp是一个轻量优秀的网络框架.用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient,) 使用方法: 1 ...

  5. JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】

        一.闭包(Closure)模糊概述 之前总觉得闭包(Closure)很抽象而且难理解,百度一下"闭包"名词,百度的解释是:“闭包是指可以包含自由(未绑定到特定对象)变量的代 ...

  6. 《Java大学教程》—第5章 数组

    5.6 增强的for循环:访问整个数组,读取数组元素,不基于数据下列5.7 数组方法:最大值.求和.成员访问.查找 1.答:P92存储固定个数相同数据类型的一组元素. 2.答:P92所有存储在一个特定 ...

  7. 【CQOI2012】局部极小值

    [CQOI2012]局部极小值 Description 有一个\(n\)行\(m\)列的整数矩阵,其中\(1\)到\(nm\)之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或 ...

  8. Openstack window 10 镜像制作

    Windows 10 Openstack 镜像制作 //************************************************************************ ...

  9. 16.ajax_case01

    # 抓取北京市2018年积分落户公示名单 # 'http://www.bjrbj.gov.cn/integralpublic/settlePerson' import csv import json ...

  10. UVA129-Krypton Factor(搜索剪枝)

    Problem UVA129-Krypton Factor Accept:1959  Submit:10261 Time Limit: 3000 mSec  Problem Description 通 ...