【刷算法】二叉树中序遍历的下一个结点

问题形貌

给定一个二叉树和个中的一个结点,请找出中序遍历递次的下一个结点而且返回。注重,树中的结点不仅包括摆布子结点,同时包括指向父结点的指针。

剖析

关于二叉树中序遍历来讲,某node的下一个节点能够分为以下几种状况:

  1. node.right 不为 null时,依据中序遍历的定义,下一个节点则是node右子树里最左侧的节点。
  2. node.right 为 null时,考核node是不是为node.parent的左节点,如果是的话,node的下一个节点就是node.parent;不然,考核node.parent是不是为node.parent.parent的左节点,顺次如许向上探究下去。

代码完成

/*function TreeLinkNode(x){
    this.val = x;
    this.left = null;
    this.right = null;
    this.next = null;
}*/
function GetNext(node)
{
    if(node === null)
        return null;
    if(node.right !== null){
        node = node.right;
        while(node.left !== null){
            node = node.left;
        }
        return node;
    }else{
        while(node.next !== null){
            if(node === node.next.left)
                return node.next;
            node =  node.next;
        }
    }
    return null;
}
    原文作者:亚古
    原文地址: https://segmentfault.com/a/1190000015641881
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞