题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题目链接:
分析:
中路遍历顺序:[左子树,父节点,右子树]
1、[左子树,当前节点,右子树],当前节点有右子树,那么下一个节点一定在右子树。
2、[当前节点,父节点,右子树],当前节点没有右子树,那么下一个节点一定是当前节点为左子树时的父节点。
3、[左子树,父节点,当前节点],没有下一个节点。
/* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; } } */ public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { TreeLinkNode cur = pNode; //[左子树,当前节点,右子树] //如果有右子树,那么下一个节点一定在右子树的最左子树的节点。 if(cur.right != null){ cur = cur.right; while(cur.left != null){ cur = cur.left; } return cur; } //[当前节点,父节点,右子树] //当没有右子树时,下一个节点一定是父节点的左子树。 if(cur.next != null){ TreeLinkNode par = cur.next; while(par != null && par.left != cur){ cur = par; par = par.next; } if(par != null && par.left == cur){ return par; } } return null; } }