给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回
2017-09-06 22:41
423 查看
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/* 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) { TreeLinkNode temp = null; if(pNode.next==null){ //此节点是父节点 //如果是根节点,返回最左的左叶子节点,如果左叶子节点为空,返回它的父节点 if(pNode.right!=null){ temp = pNode.right; while(temp.left!=null){ temp = temp.left; } return temp; }else{ return null; } } //第一步判断此节点是父节点的左子节点还是右子节点,还是根节点 if(pNode.next.left==pNode){ //如果是父节点的左子节点,判断此节点有没有右儿子 if(pNode.right!=null) { temp = pNode.right; while(temp.left!=null){ temp = temp.left; } return temp; }else{ //如果没有右儿子,则返回父节点 return pNode.next; } }else{ //如果是父节点的右儿子,在没有右儿子的情况下,需要判断是在整个树的左边还是在右边 //判断有没有右儿子, if(pNode.right!=null) { temp = pNode.right; while(temp.left!=null){ temp = temp.left; } return temp; }else{ //在没有右儿子的情况下,需要判断是在整个树的左边还是在右边 TreeLinkNode node=null; TreeLinkNode mark = pNode; while(pNode.next!=null){ node = pNode; pNode = pNode.next; } if(node==pNode.left){ //如果是左子树 return mark.next.next; }else{ //如果是右子树,则该节点是最后一个叶子节点,则返回null return null; } } } } }
相关文章推荐
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 《剑指offer》-找出中序遍历顺序的下一个结点并且返回
- 给定一个二叉树和其中的一个节点,求中序遍历这个节点的下一个节点
- 定义一个字符数组,在其中找出指定的字符,并且返回他的索引值
- 有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,
- 给定一个二叉树,返回自下而上的顺序遍历其节点值(即从左到右,从叶到根逐级)。
- 试编写一个函数,返回一颗给定二叉树在中序遍历下的最后一个节点(分别用递归和非递归实现)
- 二叉树 给定一个节点,求中序遍历下一个节点
- 给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
- 给定一个字符串列表,找出单词中最长单词,可以用l列表中的其他单词一次构建一个字符。返回具有最小字典顺序的最长单词。
- 给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数,请在这个特殊数组中找出给定的整数
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- 找出二叉树中指定结点的下一个结点(中序后继)可以假定每个结点都有指向父节点的连接
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- 输出二叉树中中序遍历中给定结点的下一个结点
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 设计一个算法,找出二叉查找树中指定结点的“下一个“结点(也即中序后继)。可以假定每个结点都含有指向父结点的连接。
- 给定一个整数数列,找出其中和为特定值的那两个数。 JS版