zoukankan      html  css  js  c++  java
  • JZ57 二叉树的下一个结点

    二叉树的下一个结点

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

    思路:根的前一个节点是左子树遍历的最后一个节点,根节点的下一个节点是右子树遍历的第一个节点,即右子树最左边的节点。

    本题的思路是:按照当前节点是否有右子树进行划分。

    如果有右子树,那么就是右子树遍历到的最左边的孩子节点。

    如果没有右子树,就需要向上访问父节点,只要该父节点的父节点左孩子是父节点,就是第一个左转的节点,即为答案。

    func GetNext(pNode *TreeLinkNode) *TreeLinkNode {
        if pNode == nil {
            return nil
        }
        //have right subtree
        if pNode.Right != nil {
            nextRight := pNode.Right
            for  nextRight.Left != nil {
                nextRight = nextRight.Left
            }
            return nextRight
        } else{ //have not right subtree
            for  pNode.Next != nil {
                if (pNode.Next.Left != nil) && (pNode.Next.Left.Val == pNode.Val) {//可以直接比较指针
                    return pNode.Next
                }
                pNode = pNode.Next
            }
        }
        return nil
    }
  • 相关阅读:
    Java文档注释
    Java程序基本框架
    Java文件手动编译执行步骤
    JDK安装中配置Path无效解决办法
    JDK安装配置
    Java简单介绍运行机制
    python代码注释
    python从hello world开始
    python,pycharm,anaconda之间的区别与联系
    python环境配置
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14642591.html
Copyright © 2011-2022 走看看