請(qǐng)?jiān)O(shè)計(jì)一個(gè)算法可帽,尋找二叉樹(shù)中指定結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)(即中序遍歷的后繼)。
給定樹(shù)的根結(jié)點(diǎn)指針TreeNode* root和結(jié)點(diǎn)的值int p草戈,請(qǐng)返回值為p的結(jié)點(diǎn)的后繼結(jié)點(diǎn)的值蜀涨。保證結(jié)點(diǎn)的值大于等于零小于等于100000且沒(méi)有重復(fù)值,若不存在后繼返回-1兜蠕。
方法一:
中序遍歷扰肌,利用信號(hào)變量,保存下一個(gè)節(jié)點(diǎn)值
class Successor:
def findSucc(self, root, p):
# write code here
self.status = False
self.res = -1
self.checkit(root,p)
return self.res
def checkit(self,root,p):
if not root:
return
self.checkit(root.left,p)
if self.status:
self.res = root.val
self.status = False
return
if root.val==p:
self.status = True
self.checkit(root.right,p)
方法二:
利用輔助數(shù)組熊杨,把全體節(jié)點(diǎn)值存儲(chǔ)在數(shù)組中
class Successor:
def findSucc(self, root, p):
# write code here
self.arr = []
self.dfs(root)
return self.arr[self.arr.index(p) + 1]
def dfs(self, root):
if not root:
return
self.dfs(root.left)
self.arr.append(root.val)
self.dfs(root.right)