原创

【剑指Offer】062——二叉树的第k个结点 (栈、树)

62.二叉树的第k个结点 (栈、树)

题目描述

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

解题思路

因为二叉搜索树按照中序遍历的顺序打印出来就是排好序的,所以,我们按照中序遍历找到第k个结点就是题目所求的结点。本程序在设计中,当遍历到k时就一直返回当前这个查询到的结点,其他情况返回空,程序中存在不返回空的语句,这个是在查找到之后向前返回查找到的那个结点用的。

参考代码

Java

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    int index = 0; // 全局变量,与k比较
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        // 中序遍历到第k个为止
        if(pRoot != null){
            // 前
            TreeNode node = KthNode(pRoot.left, k);
            if(node != null)
                return node;
            // 根
            index ++;
            if(index == k)
                return pRoot;
            // 后
            node = KthNode(pRoot.right, k);
            if(node != null)
                return node;
        }
        return null;
    }
}

Python

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回对应节点TreeNode
    def __init__(self):
        self.index = 0
    def KthNode(self, pRoot, k):
        # write code here
        if pRoot:
            node = self.KthNode(pRoot.left,k)
            if node:return node
            self.index += 1
            if self.index == k: return pRoot
            node = self.KthNode(pRoot.right,k)
            if node:
                return node
        return None
正文到此结束
本文目录