ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

二叉搜索树中的第k个结点Python

2020-05-26 09:04:11  阅读:217  来源: 互联网

标签:结点 遍历 Python root self list None 二叉 树中


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

 

思路:根据题目,遍历之后第三个结点是4,我们可以先看看各个遍历的结果

   前序遍历:根左右  5 3 2 4 7 6 8

   中序遍历:左根右  2 3 4 5 6 7 8

   后序遍历:左右根  2 4 3 6 8 7 5

 

   所以我们需要在类内定义一个方法,用于对结点进行中序遍历,需要用到递归的思想,同时要一个list记录结点,只记录根节点,不断递归的结果,最后每个叶子节点都是根节点,就可以添加到list中。特殊情况:空结点

   在主方法中,我们需要对k进行判断,k小于0或者大于结点的长度,都是没有意义的

   其它情况,我们需要返回第k个结点元素

   中序遍历方法的调用需要在判断之前完成,同理list在主方法以及遍历方法中都要用到,并且它们都是同一个意思,list是一个全局变量,需要提前定义

   

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回对应节点TreeNode
    def KthNode(self, pRoot, k):
        # write code here
            global a
            a=[]
            self.midnode(pRoot)
            if k<=0 or k>len(a):
                return None
            else:
                return a[k-1]

    def midnode(self,root):
            if not root:
                return None
            self.midnode(root.left)
            a.append(root)
            self.midnode(root.right)

  

标签:结点,遍历,Python,root,self,list,None,二叉,树中
来源: https://www.cnblogs.com/cong3Z/p/12961146.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有