剑指offer学习笔记-二叉搜索树的第k小的节点

一、中序遍历

中序遍历的递归过程为:若二叉树为空,则遍历结束。否则:
1、中序遍历根节点的子树;
2、访问节点;
3、中序遍历根节点的子树。
递归算法

void InOrder(BiTree bt)
{if (bt == null) return;
InOrder(bt->lchild);
Visit(bt);
InOrder(bt->rchild);
}

先序遍历:根 左 右
后续遍历:左 右 根

二、二叉搜索树(二叉排序树)

特点:
在这里插入图片描述

三、代码(转载)

添加链接描述

import java.util.ArrayList;
public class Solution {
    ArrayList<TreeNode> list = new ArrayList<>();
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        mid(pRoot);
        if(k<1||list.size()<k){
            return null;
        }else{
            return list.get(k-1);
        }
    }  
    //递归遍历二叉搜索树
    public void mid(TreeNode pRoot){
        if(pRoot!=null){
            mid(pRoot.left);
            list.add(pRoot);
            mid(pRoot.right);
        }
    }
}

本来想不用数组进行存储通过计数控制遍历次数直接返回所查找的节点,减少内存开支,但是在递归的过程中就一直存在计数变量一直被初始化的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值