题目要求:
现在,给定特殊的二叉树数据结构,每个节点不仅有左右孩子的指针,还有指向父节点的指针。
公共类节点{公共int value; 公共节点左; 公共节点权限; 公共节点父项; 公共节点(intvalue ) { this.value=value; }将以下节点编写如下: 中序遍历的下一个节点是下一个节点。
现在给节点,请求他的后继节点。
思路:
中顺扫描按左中右的顺序。 因此,可分为两种情况。
1 .假设该节点中有右部分树,则按中序循环的下一个节点是右部分树的最左下的节点。
2 .如果此节点没有右子树,则在父类中查找中顺序遍历的下一个节点。 中顺遍历按左中右的顺序,他左边子树的所有节点都在他前面,所以下一个节点一定在父节点上。
在这种情况下,可分为以下两种情况。
他在父节点右边的子树上。 那么,根据左中右的关系,其实他的父节点排在他前面。 因此,只能继续从父节点的父节点中查找。
他在父节点左边的子树上。 于是,他的父节点是他的下一个节点。
代码:
publicstaticnodegetsuccessornode (节点节点) if ) node==null { return null; (if ) node.right!=null}{node=node.right; wile(node.left!=null}{node=node.left; }返回节点; }else { Node parent=node.parent; while (父!=nullparent.left!=node}{node=parent; parent=node.parent; }返回父项; }