T59:二叉搜素树的第K个节点(Java)

本文介绍了一种在二叉搜索树中寻找第K小节点的算法,通过中序遍历的方式,利用栈数据结构实现了递增顺序访问树节点,最终找到目标节点。示例代码使用Java实现。
摘要由CSDN通过智能技术生成

题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。

分析:二叉搜素树就是二叉树的中序遍历

import java.util.Stack;

public class KthNode2 {
	public static class TreeNode {
	    int val = 0;
	    TreeNode left = null;
	    TreeNode right = null;

	    public TreeNode(int val) {
	        this.val = val;

	    }

	}
	
	public static TreeNode KthNode(TreeNode pRoot, int k) {   
		 if(pRoot==null||k==0){
	    	return null;
	    }
	     int count =0;
	     Stack<TreeNode> stack=new Stack<TreeNode>();
	    while(pRoot!=null||!stack.isEmpty()){
	    	while(pRoot!=null){
	    	    stack.push(pRoot);
	    		pRoot=pRoot.left;
	    	}
            if(!stack.isEmpty()){
	    	   count++;
	    	   pRoot=stack.pop();
	    	   if(count==k){
	    			return pRoot;
	    		}
	    	pRoot=pRoot.right;
	    	}
	    }
	    		return null;
	    }
	 
	 public static void main(String[] args) {
		 TreeNode head=new TreeNode(5);
		 head.left=new TreeNode(3);
		 head.right=new TreeNode(7);
		 head.left.left=new TreeNode(2);
		 head.left.right=new TreeNode(4);
		 head.right.left=new TreeNode(6);
		 head.right.right=new TreeNode(8);
		 System.out.println(KthNode(head,8));
		 
		 
	}
 }

是递增的树。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值