2022-2-18 剑指offer day8
作者:互联网
题1:
JZ54 二叉搜索树的第k个节点
描述
给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。 1.返回第k小的节点值即可 2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1 3.保证n个节点的值不一样 数据范围: 0 \le n \le10000≤n≤1000,0 \le k \le10000≤k≤1000,树上每个结点的值满足0 \le val \le 10000≤val≤1000进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
如输入{5,3,7,2,4,6,8},3时,二叉树{5,3,7,2,4,6,8}如下图所示: 该二叉树所有节点按结点值升序排列后可得[2,3,4,5,6,7,8],所以第3个结点的结点值为4,故返回对应结点值为4的结点即可。
1 import java.util.*; 2 3 /* 4 * public class TreeNode { 5 * int val = 0; 6 * TreeNode left = null; 7 * TreeNode right = null; 8 * public TreeNode(int val) { 9 * this.val = val; 10 * } 11 * } 12 */ 13 14 public class Solution { 15 /** 16 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 17 * 18 * 19 * @param proot TreeNode类 20 * @param k int整型 21 * @return int整型 22 */ 23 int count=0; 24 int result=-1; 25 public int KthNode (TreeNode proot, int k) { 26 if (proot==null||k<0) return result; 27 // write code here 28 KthNode(proot.left,k); 29 count++; 30 if (count==k) return result=proot.val; 31 KthNode(proot.right,k); 32 return result; 33 } 34 }
思路:递归,利用全局变量记录 次序以及结果。中序遍历。
题2:
JZ7 重建二叉树
描述
给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。 提示: 1.vin.length == pre.length 2.pre 和 vin 均无重复元素 3.vin出现的元素均出现在 pre里 4.只需要返回根结点,系统会自动输出整颗树做答案对比 数据范围:n \le 2000n≤2000,节点的值 -10000 \le val \le 10000−10000≤val≤10000 要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)import java.util.*; /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] vin) { int n=pre.length; return Construct(pre,vin,0,n-1,0,n-1); } public TreeNode Construct(int [] pre,int [] vin, int s1, int e1 , int s2 ,int e2) { if (s1>e1||s2>e2) return null; TreeNode root=new TreeNode(pre[s1]); int index=s2; while (vin[index]!=pre[s1]) { index++; } System.out.print(index); root.left=Construct(pre,vin,s1+1,s1+index-s2,s2,index-1); root.right=Construct(pre,vin,s1+index+1-s2,e1,index+1,e2); return root; } }
思路:递归实现左右子树,添加数组的索引区间来生成树。
标签:pre,结点,TreeNode,val,day8,int,18,vin,2022 来源: https://www.cnblogs.com/benbicao/p/15908128.html