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

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

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

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

示例:

  1. 输入:7
  2. 输出:[[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]]
  3. 解释:

提示:

  • 1 <= N <= 20

递归做的,

贴代码:

  1. public List<TreeNode> allPossibleFBT(int N) {
  2. List<TreeNode>list=new ArrayList<TreeNode>();
  3. TreeNode node=new TreeNode(0);
  4. if(N==0)
  5. return null;
  6. if(N==1){
  7. list.add(node);
  8. return list;
  9. }
  10.  
  11. else{
  12. List<TreeNode>list1=new ArrayList<TreeNode>();
  13. for(int h=1;h<N-1;h++){
  14. if(h%2==0)
  15. continue;
  16. List<TreeNode>left=allPossibleFBT(h);
  17. List<TreeNode>right=allPossibleFBT(N-h-1);
  18. if(h==3){
  19. //System.out.println(right.size());
  20. //System.out.println(right.get(0).left.val);
  21. //System.out.println(right.get(0).right.right.val);
  22. //System.out.println(right.get(1).left.left.val);
  23. //System.out.println(right.get(1).right.val);
  24. }
  25. for(int j=0;j<left.size();j++){
  26.  
  27. for(int i=0;i<right.size();i++){
  28. TreeNode node1=new TreeNode(0);
  29. node1.left=left.get(j);
  30. node1.right=right.get(i);
  31. list1.add(node1);
  32. }
  33. }
  34. }
  35. return list1;
  36.  
  37. }
  38.  
  39. }

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

897递增顺序查找树

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

示例 :

  1. 输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]
  2.  
  3. 5
  4. / \
  5. 3 6
  6. / \ \
  7. 2 4 8
  8.  / / \
  9. 1 7 9
  10.  
  11. 输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
  12.  
  13. 1
  14.   \
  15.   2
  16.   \
  17.   3
  18.   \
  19.   4
  20.   \
  21.   5
  22.   \
  23.   6
  24.   \
  25.   7
  26.   \
  27.   8
  28.   \
  29. 9

提示:

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

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

  1. public TreeNode increasingBST(TreeNode root) {
  2. Stack <TreeNode>stack=new Stack<TreeNode>();
  3. List<Integer>re=new ArrayList<Integer>();
  4. int tag=0;
  5.  
  6. while(root!=null||!stack.isEmpty()){
  7. while(root!=null){
  8. stack.push(root);
  9. root=root.left;
  10. }
  11. if(!stack.isEmpty()){
  12. TreeNode node=stack.pop();
  13. re.add(node.val);
  14. root=node.right;
  15. }
  16. }
  17. TreeNode next=new TreeNode(re.get(re.size()-1));
  18. for(int i=re.size()-2;i>=0;i--){
  19. TreeNode node=new TreeNode(re.get(i));
  20. node.right=next;
  21. next=node;
  22. }
  23. return next;
  24. }

919. 完全二叉树插入器

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

  1. class CBTInserter {
  2. TreeNode root;
  3. public CBTInserter(TreeNode root) {
  4. this.root=root;
  5. }
  6.  
  7. public int insert(int v) {
  8. Queue <TreeNode>queue=new LinkedList<TreeNode>();
  9. queue.offer(root);
  10. int re=0;
  11. int flag=0;
  12. while(!queue.isEmpty()){
  13. for(int i=0;i<queue.size();i++){
  14. TreeNode node=queue.poll();
  15. if(node.left==null&&node.right==null){
  16. node.left=new TreeNode(v);
  17. re=node.val;
  18. flag=1;
  19. }
  20. else if(node.right==null){
  21. node.right=new TreeNode(v);
  22. re=node.val;
  23. flag=1;
  24. }
  25. else{
  26. queue.offer(node.left);
  27. queue.offer(node.right);
  28. }
  29. if(flag==1)
  30. break;
  31.  
  32. }
  33. if(flag==1)
  34. break;
  35. }
  36. return re;
  37.  
  38. }
  39.  
  40. public TreeNode get_root() {
  41.  
  42. return root;
  43. }
  44. }

951.

翻转等价二叉树

简单的递归,嘿嘿

  1. public boolean flipEquiv(TreeNode root1, TreeNode root2) {
  2. if(root1==null&&root2==null)
  3. return true;
  4. else if(root1==null||root2==null)
  5. return false;
  6. if(root1.val!=root2.val)
  7. return false;
  8. if(root1.left==null&&root1.right==null&&root2.left==null&&root2.right==null)
  9. return true;
  10. boolean judge1=flipEquiv(root1.left,root2.left)&&flipEquiv(root2.right,root1.right);
  11. boolean judge2=flipEquiv(root1.left,root2.right)&&flipEquiv(root1.right,root2.left);
  12. return judge1||judge2;
  13.  
  14. }

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. solr 加载 停用/扩展词典

    startup.bat 停止词典的效果

  2. sublime text 文件打开时回调一些函数

    需求:公司服务端脚本以 .s 结尾的文件,也按 js 语法识别,方便查看函数定义. 每次都 ss:js 比较麻烦,所以写个插件. import sublime, sublime_plugin clas ...

  3. Fusioncharts的数字格式化

      1.     小数点位数格式化 <chart ... decimals='2' > Eg.数值12.432, 13.4 and 13,使用<chart ... decimals= ...

  4. 利用koa实现mongodb数据库的增删改查

    概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...

  5. spring mvc开发过程中的乱码问题

    在保证jsp,xml,数据库,编辑器编码一致的情况下. 1,用户输入中文,后台接收到也是中文,但是保存到数据库时乱码, 解决方法: 链接数据库的url="jdbc:mysql://local ...

  6. linux的Yum软件包管理工具

    Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载 ...

  7. AutoCompleteTextView搭配Poi搜索实现多项选择

    项目需要 需要用到AutoCompleteTextView控件,在输入之后能在下方产生一个推荐结果的列表,就类似于金山词霸一类软件.输入一两个字符就能出来一系列类似的的单词, 这里做的例子是输入城市名 ...

  8. mac操作记录

    1.mac'主目录地址' 类似我的电脑 点桌面空白处按shift+command+C, 双击Macintosh HD图标后就能看见system文件夹 2.做excel表格,下载Microsoft Of ...

  9. 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第一周(Practical aspects of Deep Learning) —— 4.Programming assignments:Gradient Checking

    Gradient Checking Welcome to this week's third programming assignment! You will be implementing grad ...

  10. STL简洁 && c++读取cfg文件

    在c++工程中,往往需要修改一些变量来实现不同的功能效果,这是cfg文件的使用可以使得工程更加高效与便利,这篇文章介绍的就是c++读取cfg文件的相关内容,以便及时总结和日后回顾. STL即标准模板库 ...