`
风云叶易
  • 浏览: 2158 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

二叉树的下一个结点

阅读更多

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

 

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

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        
    }
}

  写一个函数返回中序下的下一个结点。

 

思路:

//当前结点为根结点时:

 //1)若根结点无右子树,返回NULL
 /2)若根结点有右子树,返回右子树中最左端的结点
    
 //当前结点为左叶子结点:
    //直接返回其父结点
 //当前结点为右叶子结点
  //1)若其祖父结点存在且其父结点是其祖父结点的左结点,返回其祖父结点
  //2)否则,返回NULL
   
    //当前结点为非叶子结点
    //1)若无右子树,返回其父结点
    //2)若有右子树,返回其右子树中最左端的结点

public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode==null)
            return null;
        TreeLinkNode temp;
        //当前结点为根结点
        if(pNode.next==null){
            //无右子树
            if(pNode.right==null){
                return null;
            }else {
                temp=pNode.right;
                while(temp.left!=null){
                    temp=temp.left;
                }
                return temp;
            }
        }
        //当前结点为左叶子结点
        if((pNode.left==null&&pNode.right==null)&&(pNode.next.left==pNode)){
            //无右子树
            if(pNode.right==null){
                return pNode.next;
            }else{
            //找到右子树的最左子叶子结点
                temp=pNode.right;
                while(temp.left!=null){
                    temp=temp.left;
                }
                return temp;
            }
        }
        //当前结点为右叶子结点
        if((pNode.left==null&&pNode.right==null)&&(pNode.next.right==pNode)){
            //当祖父结点是否存在
            if(pNode.next.next!=null&&pNode.next.next.left==pNode.next){
                return pNode.next.next;
            }else{
                return null;
            }
        }
        if(pNode.right!=null){
            temp=pNode.right;
            while(temp.left!=null){
                temp=temp.left;
            }
            return temp;
        }else{
            return pNode.next;
        }
    }
}

 

分享到:
评论

相关推荐

    编写一个将二叉树中每个结点的左右孩子交换的算法。

    ### 编写一个将二叉树中每个结点的左右孩子交换的算法 #### 背景介绍 在计算机科学中,二叉树是一种常用的数据结构,它在很多实际问题中有着广泛的应用,如文件系统、编译器设计、数据库索引等。二叉树中的每个...

    输出二叉树中某结点的双亲结点

    采用先序法建立一棵二叉树,设计输出某结点数据为x的双亲结点的数据的程序,二叉树的数据域类型为字符型, 扩展二叉树的叶子结点用‘#’表示,要求可以求一棵二叉树中多个结点的双亲。

    编写算法交换二叉树中所有结点的左右子树.doc

    然后,定义了一个结构体 node,用于表示二叉树的结点,包括数据域和左右子树指针。 在建立二叉树的函数 creatree() 中,首先置空队列 Q 和二叉树 T。然后,输入第一个结点信息,并判断是否为结束符“#”。如果不是...

    二叉树叶子结点个数计算.doc

    例如,如果我们输入的二叉树结点数据为“A B C D E F”,则输出的叶子结点个数为3。 六、调试感想 在实现二叉树叶子结点个数计算时,我们需要注意递归函数的设计和实现。如果递归函数设计不当,可能会导致程序执行...

    输出二叉树中的叶子结点

    二叉树部分关于结点的问题有点难,这是个简单易懂的

    二叉树的指定结点路径

    在二叉树中,每个结点最多有两个孩子结点,即左孩子和右孩子。二叉树可以分为满二叉树、完全二叉树和非完全二叉树等。二叉树的指定结点路径是指从根结点到目标结点的路径。 在二叉树的遍历中,存在三种基本的遍历...

    求二叉树叶子结点个数和遍历中序

    计算二叉树中叶子结点的数量是一个常见的问题。根据给定的代码片段,我们可以看到一种递归的方法来实现这一功能: ```c int Leaf_rec(BiTree T) { // 计算T的叶子结点数目 if (T == NULL) return 0; // 空树时...

    //该程序用于在二叉树中寻找是否有元素X的结点,若找到返回结点地址,否则返回空指针(假设二叉树中至多有一个结点的元素为X)

    //该程序用于在二叉树中寻找是否有元素X的结点,若找到返回结点地址,否则返回空指针(假设二叉树中至多有一个结点的元素为X)

    二叉树上结点的路径

    二叉树是一种特殊的树形结构,它的每个结点最多只有两个孩子,即左孩子和右孩子。这种数据结构广泛应用于计算机科学和信息技术领域,例如数据库系统、编译器设计、算法设计等。 二、 二叉树的建立 在本文中,我们...

    建立二叉树并求指定结点路径

    能够按先序遍历的次序输入二叉树的各个结点,并能够输出中序遍历的序列号,以及指定的路径 和三个应用:求二叉树的深度 二叉树的叶子结点个数和将二叉树左右子树交换

    二叉树 基础

    二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_...

    题目:编写递归算法,将二叉树中所有结点的左右子树相互交换 - READ.doc

    * 二叉树是一种特殊的树形结构,每个结点最多有两个子树,即左子树和右子树。 * 在树形结构中,每个结点都可以看作是一个独立的单元,具有自己的属性和操作。 三、递归函数知识点 * 递归函数是一种特殊的函数,...

    计算二叉树的结点个数

    输入的数据只有一组,是一棵二叉树的先序遍历序列,结点的值为一个小写字母,#号表示空结点,如输入:a b d e # # f # # # c # #,数据之间空一个格,得到的二叉树如下。( 图暂时不能上传,请同学们自己画出图) ...

    统计二叉树中元素为x的结点数目.cpp

    笔者使用二叉链表作为二叉树的存储结构,利用递归的思想,实现了统计二叉树中元素为x的结点数目的算法。二叉链表的应用是《数据结构与算法》课程中的重点内容之一,值得收藏学习。

    利用栈建立一个二叉树,然后用递归实现二叉树两个结点的最近公共祖先结点

    在利用栈建立一个二叉树的基础上,我们可以通过递归来实现二叉树中两个结点的最近公共祖先结点。递归是一种非常强大的算法技巧,它可以通过反复调用自身来解决问题。在这个特定的问题中,我们可以利用递归来查找两个...

    二叉树从根结点到指定结点路径的课程设计

    信息。。。。。。。。。。。。。。。。。。。。。。。。。

    求度为2的结点个数-二叉树

    ### 求度为2的结点个数-二叉树 #### 背景介绍 在计算机科学中,二叉树是一种常见的数据结构,它由一个根节点以及最多两个子树(左子树和右子树)组成,这两个子树也是二叉树。每个节点最多有两个子节点。在本问题中...

    建立二叉树的方法、计叶子结点个数、二叉树的树深

    0. 建立二叉树(方法0) 1. 建立二叉树(方法1) 2. 统计叶子结点个数 3. 求二叉树的树深

    编写递归算法,计算二叉树中叶子结点的数目

    编写递归算法,计算二叉树中叶子结点的数目

    数据结构与算法 求二叉树上结点的路径

    在上面的代码中,我们还可以看到一个函数 `nodepath`,它用于查找二叉树上某个结点的路径。这个函数使用栈来存储结点,并使用循环来遍历二叉树。它首先将根结点压入栈中,然后不断地弹出栈顶结点,并将其左子树和右...

Global site tag (gtag.js) - Google Analytics