018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)

给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点(即中序遍历后它的后继结点),

其中每个结点都有指向其父亲的链接。

这个题本质就是线索化二叉树时找后继结点的题。找后继结点存在两种情况:

1 如果当前结点有右孩子,则后继结点为右孩子的最左结点

2 如果没有右孩子,

A 当前结点为父结点的左孩子,则父结点就是后继结点

B 当前结点为父结点的右孩子,则向父结点找,直到当前结点不是父结点的右孩子终止,此时

父节点就是后继结点

代码:

struct TreeNode
{
	int data;
	TreeNode* leftChild;
	TreeNode* rightChild;
	TreeNode* parent;
};

TreeNode* findContinue(const TreeNode* vNode)
{
	if (vNode == NULL) return NULL;

	if (vNode->rightChild != NULL)
	{
		TreeNode* Tmp = vNode->rightChild;
		while (Tmp->leftChild != NULL)
		{
			Tmp = Tmp->leftChild;
		}
		return Tmp;
	}

	TreeNode* Cur     = vNode;
	TreeNode* pParent = Cur->parent;
	while (pParent != NULL && pParent->rightChild == Cur)
	{
		Cur     = pParent;
		pParent = pParent->rightChild;
	}
	return pParent;
}
时间: 2024-12-19 09:46:21

018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)的相关文章

点击上一个为上一张图片,点击下一个为下一张图片

如图效果 原理: 大体上还是一个简单的选项卡,但是由于上一个和下一个固定,点击第几下的时候,是第几张图片,所以,要对点击的次数做一个定义,即iNum;同时,点击“下一个”的时候,点击的次数要依次递增,如果点击的次数大于等于图片的个数的时候,要回归到第一张图片:点击“上一个”的时候,点击的次数要依次递减iNum可能会0:为0的时候,为第一张图片,那么在递减一下,iNum就为负数了,而这个负数其实就应该让图片回归到最后一张图片,最后一张图片的下标就是全部图片的个数-1 代码如下: 1 <!docty

LeetCode 第117题 填充每个节点的下一个右侧节点指针||

给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则将 next 指针设置为 NULL. 初始状态下,所有 next 指针都被设置为 NULL. 示例: 1 class Solution117 { 2 3 public Node connect(Node root) { 4 if (root == null) { 5 r

剑指offer:二叉树的下一个节点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. class TreeLinkNode: def __init__(self, x): self.val = x self.left = None self.right = None self.parent = None class Solution: """ 给定节点,求中序遍历下该节点的下一个节点 """

剑指Offer——二叉树的下一个节点

1.题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.代码实现 /* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; 指向父节点 TreeLinkNode(int val) { this.val = val; } }

NASA的下一个十年(译)

原文 MICHAEL ROSTON (New York Times) 从左起:木卫二:土卫六:经过火星的水手谷星的合成图:金星的拼接图 大多数人已经从人类第一次近距离看到冥王星的兴奋中冷静下来.下一个任务是什么?在新视野号返回了关于冥王星的照片之际,这个问题就自然浮现出来了.(译者注:新视野号探测器于2006年发射,历时9年,于2015年7月14日,跋涉将近50亿公里后来到冥王星,人类终于完成了太阳系所有行星和矮行星的近距离探测.在探测完海王星后,两位年轻的科学家在电梯里面偶遇当时的NASA的主

[Leetcode]下一个更大元素II

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数.如果不存在,则输出 -1. 示例 1: 输入: [1,2,1] 输出: [2,-1,2] 解释: 第一个 1 的下一个更大的数是 2: 数字 2 找不到下一个更大的数: 第二个 1 的下一个最大的数需要循环搜索,结果也是 2. 注意: 输入数组的长度不会超过 10000. 思路:

[Swift]LeetCode503. 下一个更大元素 II | Next Greater Element II

Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the first greater number to its traversing-order next in the ar

[leetcode-117]填充每个节点的下一个右侧节点指针 II

(1 AC) 填充每个节点的下一个右侧节点指针 I是完美二叉树.这个是任意二叉树 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则将 next 指针设置为 NULL. 初始状态下,所有 next 指针都被设置为 NULL. 示例:For example, Given the following binary tree

[LeetCode] 116. 填充每个节点的下一个右侧节点指针

题目链接 : https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 题目描述: 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则将 next