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
    }
  • 相关阅读:
    Django_05_模板
    Django_04_视图
    Django_03_后台管理
    Django_02_创建模型
    Django_01_创建图书管理项目
    Djang简介
    day_03比特币转账的运行原理
    day_02比特币的转账机制及其7个名词
    day01_人类社会货币的演变
    Socket问题
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14642591.html
Copyright © 2011-2022 走看看