二叉树的下一个结点

//思路:
//1、如果一个节点的右子树不为空,那么该节点的下一个节点是右子树的最左节点;

<div align="center"><img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/b0611f89-1e5f-4494-a795-3544bf65042a.gif" width="280px"/></div>

//否则,向上找第一个左链接指向的树包含该节点的祖先节点。

<div align="center"><img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/95080fae-de40-463d-a76e-783a0c677fec.gif" width="250px"/></div>

public TreeLinkNode GetNext(TreeLinkNode pNode){
    if(pNode==null){
        return null;
    }
    if(pNode.right!=null){
        //先判断 pNode 的右子树不为 null,
        //pNode 的下一个结点就是 pNode 右子树的最左结点
        TreeLinkNode node = pNode.right; //pNode 的右子树
        while(node.left!=null){
            node = node.left;
        }
        return node;
    }else{   //否则,向上找第一个左连接指向的树包含该节点的祖先节点
        while (pNode.next!=null){
            TreeLinkNode parent = pNode.next;
            if(parent.left==pNode){
                return parent;
            }
            pNode = pNode.next;
        }
    }
    return null;
}

https://www.mianshi.onlinehttps://www.i9code.cn

本文由博客一文多发平台 OpenWrite 发布!

逃跑的眼镜_bvbEK5
7 声望0 粉丝