满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。

返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。

答案中每个树的每个结点都必须有 node.val=0

你可以按任何顺序返回树的最终列表。

示例:

输入:7
输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]]
解释:

提示:

  • 1 <= N <= 20

递归做的,

贴代码:

public List<TreeNode> allPossibleFBT(int N) {
List<TreeNode>list=new ArrayList<TreeNode>();
TreeNode node=new TreeNode(0);
if(N==0)
return null;
if(N==1){
list.add(node);
return list;
} else{
List<TreeNode>list1=new ArrayList<TreeNode>();
for(int h=1;h<N-1;h++){
if(h%2==0)
continue;
List<TreeNode>left=allPossibleFBT(h);
List<TreeNode>right=allPossibleFBT(N-h-1);
if(h==3){
//System.out.println(right.size());
//System.out.println(right.get(0).left.val);
//System.out.println(right.get(0).right.right.val);
//System.out.println(right.get(1).left.left.val);
//System.out.println(right.get(1).right.val);
}
for(int j=0;j<left.size();j++){ for(int i=0;i<right.size();i++){
TreeNode node1=new TreeNode(0);
node1.left=left.get(j);
node1.right=right.get(i);
list1.add(node1);
}
}
}
return list1; } }

艾玛这题有点坑,刚开始我把TreeNode初始化放在第一层循环里面,结果解答错误,放在第二层循环就对了,求好心人告知这是什么原因,像下面这样。我是怎么发现这个的呢。我是实在找不到bug了,让一个大佬看看,然后他觉得放在里面好看于是挪进去,于是就通过了,我去,惊了。

897递增顺序查找树

给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。

示例 :

输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]

       5
/ \
3 6
/ \ \
2 4 8
 / / \
1 7 9 输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9] 1
  \
  2
  \
  3
  \
  4
  \
  5
  \
  6
  \
  7
  \
  8
  \
9

提示:

  1. 给定树中的结点数介于 1 和 100 之间。
  2. 每个结点都有一个从 0 到 1000 范围内的唯一整数值。

树的题目做多了,发现遍历很重要,前序、中序、后序和层次遍历都应该掌握

  public TreeNode increasingBST(TreeNode root) {
Stack <TreeNode>stack=new Stack<TreeNode>();
List<Integer>re=new ArrayList<Integer>();
int tag=0; while(root!=null||!stack.isEmpty()){
while(root!=null){
stack.push(root);
root=root.left;
}
if(!stack.isEmpty()){
TreeNode node=stack.pop();
re.add(node.val);
root=node.right;
}
}
TreeNode next=new TreeNode(re.get(re.size()-1));
for(int i=re.size()-2;i>=0;i--){
TreeNode node=new TreeNode(re.get(i));
node.right=next;
next=node;
}
return next;
}

919. 完全二叉树插入器

这题还是层次遍历的变形,当然我的这种做法并不好,用了243Ms,感觉快要超时了

class CBTInserter {
TreeNode root;
public CBTInserter(TreeNode root) {
this.root=root;
} public int insert(int v) {
Queue <TreeNode>queue=new LinkedList<TreeNode>();
queue.offer(root);
int re=0;
int flag=0;
while(!queue.isEmpty()){
for(int i=0;i<queue.size();i++){
TreeNode node=queue.poll();
if(node.left==null&&node.right==null){
node.left=new TreeNode(v);
re=node.val;
flag=1;
}
else if(node.right==null){
node.right=new TreeNode(v);
re=node.val;
flag=1;
}
else{
queue.offer(node.left);
queue.offer(node.right);
}
if(flag==1)
break; }
if(flag==1)
break;
}
return re; } public TreeNode get_root() { return root;
}
}

951.

翻转等价二叉树

简单的递归,嘿嘿

 public boolean flipEquiv(TreeNode root1, TreeNode root2) {
if(root1==null&&root2==null)
return true;
else if(root1==null||root2==null)
return false;
if(root1.val!=root2.val)
return false;
if(root1.left==null&&root1.right==null&&root2.left==null&&root2.right==null)
return true;
boolean judge1=flipEquiv(root1.left,root2.left)&&flipEquiv(root2.right,root1.right);
boolean judge2=flipEquiv(root1.left,root2.right)&&flipEquiv(root1.right,root2.left);
return judge1||judge2; }

leetcode树专题894.897,919,951的更多相关文章

  1. LeetCode树专题

    LeetCode树专题 98. 验证二叉搜索树 二叉搜索树,每个结点的值都有一个范围 /** * Definition for a binary tree node. * struct TreeNod ...

  2. LeetCode:树专题

    树专题 参考了力扣加加对与树专题的讲解,刷了些 leetcode 题,在此做一些记录,不然没几天就没印象了 力扣加加-树专题 总结 树的定义 // Definition for a binary tr ...

  3. LeetCode刷题 树专题

    树专题 关于树的几个基本概念 1 树的节点定义 2 关于二叉树的遍历方法 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 2.4 层序遍历 3 几种常见的树介绍 3.1 完全二叉树 3.2 二叉 ...

  4. LeetCode 字符串专题(一)

    目录 LeetCode 字符串专题 <c++> \([5]\) Longest Palindromic Substring \([28]\) Implement strStr() [\(4 ...

  5. zkw线段树专题

    题目来自大神博客的线段树专题 http://www.notonlysuccess.com/index.php/segment-tree-complete/ hdu1166 敌兵布阵题意:O(-1)思路 ...

  6. vj线段树专题

    vj线段树专题题解 单点更新模板 void build(int x,int l,int r){//sum[x]控制l-r区域 if(l==r){Sum[x]=num[l];return ;} int ...

  7. leetcode 树类型题

    树的测试框架: // leetcodeTree.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  8. leetcode: 树

    1. sum-root-to-leaf-numbers Given a binary tree containing digits from0-9only, each root-to-leaf pat ...

  9. 《剑指offer》树专题 (牛客10.25)

    考察的知识点主要在于树的数据结构(BST,AVL).遍历方式(前序,中序,后序,层次).遍历算法(DFS,BFS,回溯)以及遍历时借助的数据结构如队列和栈.由于树本身就是一个递归定义的结构,所以在递归 ...

随机推荐

  1. 迁移桌面程序到MS Store(3)——开机自启动

    迁移桌面程序的时候,有可能你会遇到这么个需求——开机自启动.Windows传统桌面程序的传统陋习.不论什么奇葩软件都想要开机自启动,默认就给你打开,一开机哐哐哐什么雷,什么企鹅都蹦出来,也不管你用不用 ...

  2. 【转】C#中Serializable序列化实例详解

    这篇文章主要介绍了C#中Serializable序列化,以实例形式详细讲述了系列化的技术及各种序列化方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#中Serializable序列化.分 ...

  3. Python入门 ---基础知识

    Python入门不知道这些你还是承早放弃吧!真的 Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言 ...

  4. Git-根据tag创建分支

    有时候需要根据tag创建分支. 现在主分支上有一个tag为vtest.1.0.FINAL,主分支的名字为master. 1.执行:git origin fetch 获得最新. 2.通过:git bra ...

  5. 使用httpClient模拟http请求

    在很多场景下都需要用到java代码来发送http请求:如和短信后台接口的数据发送,发送数据到微信后台接口中: 这里以apache下的httpClient类来模拟http请求:以get和Post请求为例 ...

  6. ThinkCMF后台验证码不显示,无法登陆怎么办?

    ThinkCMF5在本地部署之后,过一段时间可能会莫名其妙的出现后台验证码不显示的问题,不明就里.着急登陆后台的话,可以先禁用后台验证码,方法如下: 打开文件:/app/admin/controlle ...

  7. CI框架入门笔记

    当前(2019-03-22)CodeIgniter 框架的最新版本是 3.1.5,于2017年6月发布,距今快两年了也没有更新,这与 Laravel 的更新速度相比差距太大了.因为确实,它是一个很古老 ...

  8. 【sping揭秘】10、SpringIOC容器扩展

    关于component-scan操作(去除,失效) 这个spring中的配置项,可以扫描我们对应的包下面的类,自动把带上@component,@service,@controller, @reposi ...

  9. 集合框架_DAY15

    1:集合(掌握) (1)集合的由来 我们需要对多个对象进行存储和获取.可以使用对象数组.但是,如果对象的个数是变化的,对象数组就解决不了了.怎么办呢?java就提供了集合类解决. (2)集合和数组的区 ...

  10. Selenium之元素定位

    1.查看页面元素:ID.class.type.name等. 2.通过webdriver的方法定位: find_element_by_name()  find_element_by_id()  find ...