二叉树的下一个节点_JAVA_中等

二叉树的下一个结点

http://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e

  • 寻找该节点中序遍历的下一个节点,有可能在它父辈,也可能在他孩子
  • 如果该节点右孩子为空,则下一个节点为父辈,那么找到了该节点所属于的第一个左支系的父辈,则是所求节点
  • 如果该节点右孩子不为空,则下一个节点为它的右孩子的第一个左孩子或者是它的右孩子
import java.util.*;
public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        if(pNode == null) {
            return null;
        }

        // 没有右孩子则找父节点
        if(pNode.right == null) {
            TreeLinkNode father = pNode.next;
            // 找出该孩子属于父辈的第一个非右支系
            while(father != null && father.right == pNode) {
                pNode = father;
                father = father.next;
            }
            return father;
        }

        // 自己有右孩子则下一个节点为右孩子中序输出的第一个
        pNode = pNode.right;

        // 先输出左孩子
        while(pNode.left != null) {
            pNode = pNode.left;
        }

        return pNode;
    }
}
全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务