和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

JZ57 二叉树的下一个结点

原题链接


描述

给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。


示例1

输入:{8,6,10,5,7,9,11},8
返回值:9

示例2

输入:{8,6,10,5,7,9,11},6
返回值:7

示例3

输入:{5},5
返回值:"null"
说明:不存在,后台打印"null"

思路

给了二叉树的层次遍历,以及其中的某个结点,求中序遍历该结点的下一个结点。

如果该结点是其父节点的左孩子,那中序遍历下一个结点就是父节点;

若果是右孩子,那中序遍历下一个结点~父节点是爷爷结点的左孩子还是右孩子;

有点递归的感觉。

如果右孩子存在,优先返回右孩子的最左子结点,否则返回右孩子;

右孩子不存在,一直向上找当前结点的父亲结点,如果当前结点是父节点的左孩子,返回父节点,否则当前结点指向父亲结点,继续找他的父亲结点,判断是否为左孩子,直到根节点,说明该结点中序遍历是最后一个。


解答

public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode) {

        //该结点右孩子不空
        if (pNode.right != null){
            TreeLinkNode tmp = pNode.right;
            while (tmp.left != null){
                tmp = tmp.left;
            }
            return tmp;
        }
        else{
            while (pNode.next != null){
                if (pNode.next.left == pNode)
                    return pNode.next;
                pNode = pNode.next;
            }
        }
        return null;
    }
}
posted @ 2021-07-24 20:32  klaus08  阅读(33)  评论(0编辑  收藏  举报