给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点在这里插入代码片
/*
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点
并且返回。注意,树中的结点不仅包含左右子结点,
***同时包含指向父结点的指针。
*/
public class Solution
{
public TreeNode getNext(TreeNode node)
{
if (node == null)
return null;
//目标结点有右子树的情况
//左子树不需要考虑,中序序列中左子树结点都在目标结点的前边
//找目标结点的下一个下个节点,如果目标结点的下一个结点有左节点的话就往左走,否则就是它。
//因为 遍历的时候会先遍历左节点,如果没有左节点,那么下一个结点就是它本身
if (node.right != null)
{
node = node.right;
while (node.left != null)
node = node.left;
return node;
}
//考虑 下一个节点是父节点的情况。这种情况目标结点没有右子树。
while (node.next != null)
{
TreeNode next = node.next;
//父节点的子节点是目标节点的话 那么下一个结点就是父节点。
if (next.left == node)
return next;
//父节点的右子结点是目标节点的话,那么下一个节点就在上边。
//如果一直是 往左上角的关系的话(即没有左子树),那么下一个结点就一直往上
//所以
node = next;
}
return null;
}
}