给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
/* 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的双亲结点的数据的程序,二叉树的数据域类型为字符型, 扩展二叉树的叶子结点用‘#’表示,要求可以求一棵二叉树中多个结点的双亲。
然后,定义了一个结构体 node,用于表示二叉树的结点,包括数据域和左右子树指针。 在建立二叉树的函数 creatree() 中,首先置空队列 Q 和二叉树 T。然后,输入第一个结点信息,并判断是否为结束符“#”。如果不是...
例如,如果我们输入的二叉树结点数据为“A B C D E F”,则输出的叶子结点个数为3。 六、调试感想 在实现二叉树叶子结点个数计算时,我们需要注意递归函数的设计和实现。如果递归函数设计不当,可能会导致程序执行...
二叉树部分关于结点的问题有点难,这是个简单易懂的
在二叉树中,每个结点最多有两个孩子结点,即左孩子和右孩子。二叉树可以分为满二叉树、完全二叉树和非完全二叉树等。二叉树的指定结点路径是指从根结点到目标结点的路径。 在二叉树的遍历中,存在三种基本的遍历...
计算二叉树中叶子结点的数量是一个常见的问题。根据给定的代码片段,我们可以看到一种递归的方法来实现这一功能: ```c int Leaf_rec(BiTree T) { // 计算T的叶子结点数目 if (T == NULL) return 0; // 空树时...
//该程序用于在二叉树中寻找是否有元素X的结点,若找到返回结点地址,否则返回空指针(假设二叉树中至多有一个结点的元素为X)
二叉树是一种特殊的树形结构,它的每个结点最多只有两个孩子,即左孩子和右孩子。这种数据结构广泛应用于计算机科学和信息技术领域,例如数据库系统、编译器设计、算法设计等。 二、 二叉树的建立 在本文中,我们...
能够按先序遍历的次序输入二叉树的各个结点,并能够输出中序遍历的序列号,以及指定的路径 和三个应用:求二叉树的深度 二叉树的叶子结点个数和将二叉树左右子树交换
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_...
* 二叉树是一种特殊的树形结构,每个结点最多有两个子树,即左子树和右子树。 * 在树形结构中,每个结点都可以看作是一个独立的单元,具有自己的属性和操作。 三、递归函数知识点 * 递归函数是一种特殊的函数,...
输入的数据只有一组,是一棵二叉树的先序遍历序列,结点的值为一个小写字母,#号表示空结点,如输入:a b d e # # f # # # c # #,数据之间空一个格,得到的二叉树如下。( 图暂时不能上传,请同学们自己画出图) ...
笔者使用二叉链表作为二叉树的存储结构,利用递归的思想,实现了统计二叉树中元素为x的结点数目的算法。二叉链表的应用是《数据结构与算法》课程中的重点内容之一,值得收藏学习。
在利用栈建立一个二叉树的基础上,我们可以通过递归来实现二叉树中两个结点的最近公共祖先结点。递归是一种非常强大的算法技巧,它可以通过反复调用自身来解决问题。在这个特定的问题中,我们可以利用递归来查找两个...
信息。。。。。。。。。。。。。。。。。。。。。。。。。
### 求度为2的结点个数-二叉树 #### 背景介绍 在计算机科学中,二叉树是一种常见的数据结构,它由一个根节点以及最多两个子树(左子树和右子树)组成,这两个子树也是二叉树。每个节点最多有两个子节点。在本问题中...
0. 建立二叉树(方法0) 1. 建立二叉树(方法1) 2. 统计叶子结点个数 3. 求二叉树的树深
编写递归算法,计算二叉树中叶子结点的数目
在上面的代码中,我们还可以看到一个函数 `nodepath`,它用于查找二叉树上某个结点的路径。这个函数使用栈来存储结点,并使用循环来遍历二叉树。它首先将根结点压入栈中,然后不断地弹出栈顶结点,并将其左子树和右...