题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
1.空,返回空
2.该节点存在右子节点,则指针指向该节点的右子节点,循环判断右子节点的左节点,直到左子节点为空
3.该节点不存在右子节点,循环条件(该节点的下一个节点不为空)创建一个根节点(指向该节点的下一个节点),若该节点为根节点的左子节点,返回该节点;否则继续.next
# -*- 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 pNode==None:
return None
if pNode.right!=None:
pNode=pNode.right
while(pNode.left!=None):
pNode=pNode.left
return pNode
while pNode.next!=None:
root=pNode.next
if root.left==pNode:
return root
pNode=pNode.next
return None
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if (pNode == null)
return null;
if (pNode.right != null)
{
pNode = pNode.right;
while (pNode.left != null)
pNode = pNode.left;
return pNode;
}
while (pNode.next != null)
{
TreeLinkNode root = pNode.next;
if (root.left == pNode)
return root;
pNode = pNode.next;
}
return null;
}
}