前言
大二下学期学的二叉树有些忘记了,这几天把二叉树熟悉一下。
题目描述
给定一个二叉搜索树的根节点 root
,和一个整数 k
,请你设计一个算法查找其中第 k
个最小元素(从 1 开始计数)。
示例 1:
输入:root = [3,1,4,null,2], k = 1
输出:1
示例 2:
输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3
解题思路
1. 发现规律
这种二叉树以中序遍历 是升序数组,
第k小的元素就很好找了。
2. 中序遍历概念
中序遍历的原则是:
若被遍历的二叉树非空,则按如下顺序进行遍历。
①以中序遍历方式遍历根结点的左子树**。
** ②访问根结点。
③以中序遍历方式遍历根结点的右子树**。
显然,中序遍历过程也是一个递归过程,其递归算法如下。
void INORDER( BTREE T) /* T为二叉树根结点所在链结点的地址*/
if(T! = NULL){
INORDER(T- > Ichild) ; /*遍历T所指结点的左子树*/1.5
VISIT(T); /*访问T所指结点*/
INORDER(T- > rchild) ; /*遍历T所指结点的右子树*/
**
AC代码1
var kthSmallest = function(root, k) {
let num = [];
var getNum = function(root) {
if(root != null){
getNum(root.left);
num.push(root.val);
getNum(root.right);
}
}
getNum(root);
return num[k-1];
};
AC代码【优化】
var kthSmallest = function(root, k) {
let num = [];
var getNum = function(root) {
if(root != null){
getNum(root.left);
num.push(root.val);
getNum(root.right);
}
}
getNum(root);
return num[k-1];
};
总结
其中二叉树的遍历有三种:
1. 前序遍历 2. 中序遍历 3. 后序遍历
void INORDER( BTREE T) /* T为二叉树根结点所在链结点的地址*/
if(T! = NULL){
INORDER(T- > Ichild) ; /*遍历T所指结点的左子树*/1.5
VISIT(T); /*访问T所指结点*/
INORDER(T- > rchild) ; /*遍历T所指结点的右子树*/
只是 VISIT(T);
放置的位置为 前 中 后
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情