牛客剑指offerJZ8——二叉树的下一个节点

题目描述
https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

思路:
要找到中序遍历的下一个节点,可以直接进行中序遍历,然后在中序遍历中找到根节点的位置,在返回他的下一个位置即可
题目说传入的pnode是局部子树,我们不能肯定就是父节点,所以我们要寻找父节点,因为其他节点的next指针都指向他的父节点,那么我们只要找到next=null的结点就是父节点

/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
import java.util.*;
public class Solution {
    ArrayList<TreeLinkNode>nodes=new ArrayList<TreeLinkNode>();
    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        // 首先进行中序遍历
        // 然后找到根节点的位置
        // 在输出下一个数就是
        TreeLinkNode root=pNode;
        //要找到父节点
        while(root.next!=null)root=root.next;
        Inorder(root);
        int n=nodes.size();
        System.out.println(n);
        for(int i=0;i<n-1;i++){
            TreeLinkNode tmp=nodes.get(i);
            System.out.print(tmp.val);
            if(pNode==tmp){
                return nodes.get(i+1);
            }
            
        }
        return null;
    }
    // 中序遍历
    void Inorder(TreeLinkNode root){
        if(root!=null ){
            Inorder(root.left);
            nodes.add(root);
            Inorder(root.right);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值