二叉树的下一个节点

二叉树的下一个结点

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-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务