题目描述
给定一个二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右孩子的指针,还有一个指向父节点的指针
public class Node {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode parent = null;
Node(int val) {
this.val = val;
}
}
思路
- 有右子树的时候,下一个节点为右子树的最左节点
- 没有右子树的时候,找父节点。当前节点为父节点的左孩子吗?是的话,返回父节点。不是的话,继续沿着父节点找上一层父节点,判断父节点是否为上一层父节点的左孩子,是则返回上一层父节点,不是接着查找…
public class GetNextNode {
public static class Node{
int val;
Node left;
Node right;
Node parent;
public Node(int data){
this.val = data;
}
}
public Node getNextNode(Node node){
if(node == null) return null;
// 有右子树
if(node.right != null){
while(node.left != null){
node = node.left;
}
return node;
}
// 没有右子树
while(node.parent != null){
if(node.parent.left == node) return node.parent;
node = node.parent;
}
return null;
}
}
- List item