第一想法很简单,就是学习前面“之”字型的方式,用一个 stack[] 把所有二叉树的Node按顺序从左到右收集起来,然后保存在,每次pop()一个node保存在res[]里,然后遍历res[]得到node的value值保存在res_value[]里,
然后使用sort()排序,最后返回指定第K个值对应的value所对应的node
#不过要注意K=0,pROOT = None,K>len(二叉树节点) 三种特殊情况返回None
# -*- 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
if k == 0 or pRoot == None:
return None
else:
stack = [pRoot]
res = []
res_value = []
while stack:
node = stack.pop(0)#pop()默认是index = -1返回最后一个,也可以返回最前一个,此处就需要
if node != None:
res.append(node) #res按顺序保存了所有从上到下,从左到右的Node
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
for i in res:
res_value.append(i.val)
res_value.sort()#res_final按从小到大保存了所有val
if k >= len(res_value)+1:#如果K的值大于本身二叉树所有节点的数量则返回空
return None
for j in res:#
if j.val == res_value[k-1]:
return j
# 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
if k == 0 or pRoot == None:
return None
else:
stack = [pRoot]
res = []
res_value = []
while stack:
node = stack.pop(0)#pop()默认是index = -1返回最后一个,也可以返回最前一个,此处就需要
if node != None:
res.append(node) #res按顺序保存了所有从上到下,从左到右的Node
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
for i in res:
res_value.append(i.val)
res_value.sort()#res_final按从小到大保存了所有val
if k >= len(res_value)+1:#如果K的值大于本身二叉树所有节点的数量则返回空
return None
for j in res:#
if j.val == res_value[k-1]:
return j