问题
leetcode897遇到这样一个问题,将一个数组变成一个递增顺序搜索树,使用如下方法是错误的:
for i in tree_shuzu[::-1]:
res.val = i
res.right = res
print(res)
会提示:Error - Found cycle in the TreeNode
解决方案
参考题解后一种可行的方案如下:
temp = res
for i in tree_shuzu:
res.right = TreeNode()
res.right.val = i
res = res.right
return (temp.right)
两个要点:
1、用temp存储最开始的树,后续对树再进行变动,返回temp就可以返回一整棵树
2、树的右节点要重新实例化,不然不能给右节点赋值
该题的完整代码如下:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def increasingBST(self, root: TreeNode) -> TreeNode:
tree_shuzu = []
res = TreeNode()
def digui(root):
if root != None:
digui(root.left)
tree_shuzu.append(root.val)
digui(root.right)
digui(root)
temp = res
for i in tree_shuzu:
res.right = TreeNode()
res.right.val = i
res = res.right
return (temp.right)