题目
在二叉树中找到一个节点的后继节点
java代码
package com.lizhouwei.chapter3;
/**
* @Description:在二叉树中找到一个节点的后继节点
* @Author: lizhouwei
* @CreateDate: 2018/4/15 10:18
* @Modify by:
* @ModifyDate:
*/
public class Chapter3_17 {
public DNode postNode(DNode head) {
DNode post = null;
if (head.right != null) {
post = head.right;
while (post.left != null) {
post = post.left;
}
} else {
post = head.parent;
while (post != null && post.left != head) {
head = post;
post = post.parent;
}
}
return post;
}
//测试
public static void main(String[] args) {
Chapter3_17 chapter = new Chapter3_17();
DNode head = new DNode(6);
DNode node21 = new DNode(3, head);
DNode node22 = new DNode(9, head);
DNode node31 = new DNode(1, node21);
DNode node32 = new DNode(4, node21);
DNode node33 = new DNode(8, node22);
DNode node34 = new DNode(10, node22);
DNode node41 = new DNode(2, node31);
DNode node42 = new DNode(5, node32);
DNode node43 = new DNode(7, node33);
head.left = node21;
head.right = node22;
node21.left = node31;
node21.right = node32;
node22.left = node33;
node22.right = node34;
node31.right = node41;
node32.right = node42;
node33.left = node43;
DNode postNode = chapter.postNode(node42);
System.out.print("节点5的后继节点:" + postNode.value + " ");
}
}
//双向节点
class DNode {
public int value;
public DNode left;
public DNode right;
public DNode parent;
public DNode(int value) {
this.value = value;
}
public DNode(int value, DNode left, DNode right) {
this.value = value;
this.left = left;
this.right = right;
}
public DNode(int value, DNode parent) {
this.value = value;
this.parent = parent;
}
public DNode(int value, DNode left, DNode right, DNode parent) {
this.value = value;
this.left = left;
this.right = right;
this.parent = parent;
}
}
结果
![](https://images2018.cnblogs.com/blog/1369004/201804/1369004-20180415104252760-2063282871.png)