zoukankan      html  css  js  c++  java
  • 二叉树的下一个中序节点

    题目描述

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

    分析

    • 如果有右子树:那就是右子树的最左节点
    • 如果没有右子树:向上找祖先,如果它是该祖先的左子孙,则是; 如果找不到,那本身就是最后一个节点,下一个是null

    代码

    public class TreeLinkNode {
        public int val;
        public TreeLinkNode left = null;
        public TreeLinkNode right = null;
        public TreeLinkNode next = null; //指向父节点
        public TreeLinkNode(int val)
        { this.val = val;
        }
    }
    public TreeLinkNode getNext(TreeLinkNode n){
            if (n==null)return null;
            if (n.right!=null){//有右子树:找右子树最左节点
                TreeLinkNode left = n.right;
                while (left.left!=null)left= left.left;
                return left;
            }else{//没有右子树,找为其左子孙的第一个祖先。
                TreeLinkNode father = n;
                while (father!=null){
                    if (father.next!=null && father.next.left == father)return father.next;
                    father = father.next;
                }
                return null;//找不到,那它本身就是最后一个,下一个是null
            }
    }
    

    扩展思考

    如果是前序,怎么找?

    • 有左子节点,就是左子节点
    • 没有左子节点:
      • 有右子节点:就是右子节点
      • 没有右子节点(叶节点):向上找,找祖先的右子节点(异己的)

    如果是后序,怎么找?
    后序说明当前节点的子节点都在自己前面,只有父节点在自己后面。

    • 如果没有父节点(根节点):下一个是null
    • 有父节点:
      • 父节点右子节点是自己或者为空:下一个就是父节点
      • 父节点右子节点不为空且不是自己(即作为左节点):找该右子树的最左节点
  • 相关阅读:
    for 循环、序列和range()
    Python 中的 / 运算符的一切运算结果都是浮点数
    web如何测试
    性能测试中会遇到的瓶颈
    APP测试之内存命令查询
    接口测试常见的题目
    接口测试基础知识
    异或和之和 异或问题
    DP?
    Matrix Power Series
  • 原文地址:https://www.cnblogs.com/XT-xutao/p/13188040.html
Copyright © 2011-2022 走看看