JZ54二叉搜索树的第k个节点题目给定一棵结点数为n二叉搜索树,请找出其中的第k小的TreeNode结点值。返回第k小的节点值即可不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1保证n个节点的值不一样思路算法实现根据二叉搜索树的性质,左子树的元素都小于根节点,右子树的元素都大于根节点。因此它的中序遍历(左中右)序列正好是由小到大的次序,因此我们可以尝试递归中序遍历,也就是从最小的一个节点开始,找到k个就是我们要找的目标。具体做法:step1:设置全局变量count记录遍历了多少个节点,res记录第k个节点。step2:另写一函数进行递归中序遍历,当节点为空或者超过k时,结
JZ54二叉搜索树的第k个节点题目给定一棵结点数为n二叉搜索树,请找出其中的第k小的TreeNode结点值。返回第k小的节点值即可不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1保证n个节点的值不一样思路算法实现根据二叉搜索树的性质,左子树的元素都小于根节点,右子树的元素都大于根节点。因此它的中序遍历(左中右)序列正好是由小到大的次序,因此我们可以尝试递归中序遍历,也就是从最小的一个节点开始,找到k个就是我们要找的目标。具体做法:step1:设置全局变量count记录遍历了多少个节点,res记录第k个节点。step2:另写一函数进行递归中序遍历,当节点为空或者超过k时,结
JZ84二叉树中和为某一值的路径(三)题目给定一个二叉树root和一个整数值sum,求该树有多少路径的的节点值之和等于sum。1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点2.总节点数目为n3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)方法非递归层次遍历思路算法实现既然要找所有路径上节点和等于目标值的路径个数,那我们肯定先找这样的路径起点啊,但是我们不知道起点究竟在哪里,而且任意节点都有可能是起点,那我们就前序遍历二叉树的所有节点,每个节点都可以作为一次起点,即子树的根节点。具体做法:step1:每次将原树中遇到的节点作为子树
JZ84二叉树中和为某一值的路径(三)题目给定一个二叉树root和一个整数值sum,求该树有多少路径的的节点值之和等于sum。1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点2.总节点数目为n3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)方法非递归层次遍历思路算法实现既然要找所有路径上节点和等于目标值的路径个数,那我们肯定先找这样的路径起点啊,但是我们不知道起点究竟在哪里,而且任意节点都有可能是起点,那我们就前序遍历二叉树的所有节点,每个节点都可以作为一次起点,即子树的根节点。具体做法:step1:每次将原树中遇到的节点作为子树
JZ86在二叉树中找到两个节点的最近公共祖先题目给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值o1和o2,请找到o1和o2的最近公共祖先节点。注:本题保证二叉树中每个节点的val值均不相同。方法BFS,非递归方法思路算法实现看到6和7公共祖先有5和3,但最近的是5。我们只要往上找,找到他们第一个相同的公共祖先节点即可,但怎么找到每个节点的父节点呢,我们只需要把每个节点都遍历一遍,然后顺便记录他们的父节点存储在Map中。我们先找到其中的一条路径,比如6→5→3,然后在另一个节点往上找,由于7不在那条路径上,我们找7的父节点是2,2也不在那条路径上,我们接着往上找,2的父节点是5,
JZ86在二叉树中找到两个节点的最近公共祖先题目给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值o1和o2,请找到o1和o2的最近公共祖先节点。注:本题保证二叉树中每个节点的val值均不相同。方法BFS,非递归方法思路算法实现看到6和7公共祖先有5和3,但最近的是5。我们只要往上找,找到他们第一个相同的公共祖先节点即可,但怎么找到每个节点的父节点呢,我们只需要把每个节点都遍历一遍,然后顺便记录他们的父节点存储在Map中。我们先找到其中的一条路径,比如6→5→3,然后在另一个节点往上找,由于7不在那条路径上,我们找7的父节点是2,2也不在那条路径上,我们接着往上找,2的父节点是5,
JZ82二叉树中和为某一值的路径(一)代码packageesay.JZ82二叉树中和为某一值的路径1;importjava.util.*;classTreeNode{intval=0;TreeNodeleft=null;TreeNoderight=null;}publicclassSolution{/***描述*给定一个二叉树root和一个值sum,判断是否有从根节点到叶子节点的节点值之和等于sum的路径。*1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点*2.叶子节点是指没有子节点的节点*3.路径只能从父节点到子节点,不能从子节点到父节点*4.总节点数目为n*思路:*既然是检
JZ82二叉树中和为某一值的路径(一)代码packageesay.JZ82二叉树中和为某一值的路径1;importjava.util.*;classTreeNode{intval=0;TreeNodeleft=null;TreeNoderight=null;}publicclassSolution{/***描述*给定一个二叉树root和一个值sum,判断是否有从根节点到叶子节点的节点值之和等于sum的路径。*1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点*2.叶子节点是指没有子节点的节点*3.路径只能从父节点到子节点,不能从子节点到父节点*4.总节点数目为n*思路:*既然是检
JZ7重建二叉树描述给定节点数为n的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}提示:1.vin.length==pre.length2.pre和vin均无重复元素3.vin出现的元素均出现在pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比具体做法:step1:先根据前序遍历第一个点建立根节点。step2:然后遍历中序遍历找到根节点在数组中的位置。step3:再按照子树的节点数将两个遍历的序列分割成子数组,将子数组送入函数建立子树。step4:直到子树的序列长
JZ7重建二叉树描述给定节点数为n的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}提示:1.vin.length==pre.length2.pre和vin均无重复元素3.vin出现的元素均出现在pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比具体做法:step1:先根据前序遍历第一个点建立根节点。step2:然后遍历中序遍历找到根节点在数组中的位置。step3:再按照子树的节点数将两个遍历的序列分割成子数组,将子数组送入函数建立子树。step4:直到子树的序列长