二叉搜索树
一种节点值之间具有一定数量级次序的二叉树,对于树中每个节点:
- 若其左子树存在,则其左子树中每个节点的值不大于该节点
- 若其右子树存在,则其右子树中每个节点的值不小于该节点
举例:
先序&中序&后序遍历
先序顺序:根左右
中序顺序:左根右
后序遍历:左右根
算法结构(以中序为例)
void inOrder(struct node* root)
{
if (root == NULL)
return;
inOrder(root->left);
visit(root->data);
inOrder(root->right);
}
递归查找
例:剑指Offer第62题
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
链接:https://www.nowcoder.com/questionTerminal/ef068f602dde4d28aab2b210e859150a?f=discussion
来源:牛客网
//思路:二叉搜索树按照中序遍历的顺序打印出来正好就是排序好的顺序。
// 所以,按照中序遍历顺序找到第k个结点就是结果。
public class Solution {
int index = 0; //计数器
TreeNode KthNode(TreeNode root, int k)
{
if(root != null){ //中序遍历寻找第k个
TreeNode node = KthNode(root.left,k);
if(node != null)
return node;
index ++;
if(index == k)
return root;
node = KthNode(root.right,k);
if(node != null)
return node;
}
return null;
}
}