二叉树的下一个节点

二叉树的下一个结点

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

一. 思路

通过给出的节点的父节点指针,一直找到该二叉树的根节点,再用中序遍历弄个序列,直接for循环访问指定节点的下一个节点即可。要注意中序遍历序列的最后一个节点的后面没有节点。

二. 代码

import java.util.*;
/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    ArrayList<TreeLinkNode> list = new ArrayList<>();
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        TreeLinkNode node = pNode;
        //找到根节点
        while (node.next != null) {
            node = node.next;
        }
        //递归中序遍历
        inOrder(node);
        for (int i = 0; i < list.size(); i++) {
            if (pNode == list.get(i)) {
                return i == list.size()-1 ? null : list.get(i+1);//处理最后一个节点的后面没有节点,只能返回null
            }
        }
        return null;
    }

    public void inOrder(TreeLinkNode node) {
        if (node != null) {
            inOrder(node.left);
            list.add(node);
            inOrder(node.right);
        }
    }
}

三. 总结

树的中序遍历序列,采用递归弄出来,需要借助一个ArrayList

全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务