问题:给定一个二叉树和其中一个节点,如何找到中序遍历序列的下一个节点?
树中的节点除了有两个分别指向左,右子节点的指针,还有一个指向父节点的指针
解析:
该二叉树的中序遍历为:dLbkeahic
- 不需要关注左子树,因为中序遍历是左中右,则左子树一定是在要找的节点的前边
- 如果所找节点有右子树,则下一个节点是右子树中最左子节点,例如:a的下一个节点是h
- 如果所找节点无右子树
- 分为自己是父节点的左节点,那下一个节点就是自己的父节点
- 自己是父节点的右节点,较为复杂,则沿着指向父节点的指针一直向上遍历,直到找到了一个是它父节点的左子节点的节点,如L的下一个节点是b
# -*- coding:utf-8 -*-
# class TreeLinkNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# self.next = None
class Solution:
def GetNext(self, pNode):
# write code here
if not pNode:
return None
if pNode.right:
pHeader = pNode.right
while pHeader.left:
pHeader = pHeader.left
return pHeader
else:
tmq = pNode
while tmq.next:
if tmq.next.left == tmq:
return tmq.next
tmq = tmq.next
return None