`

Find Next Node of BST

BST 
阅读更多

Write an algorithm to find the ‘next’ node (i.e., in-order successor) of a given node in a binary search tree. You may assume that each node has a link to its parent. 

public TreeNode findNext(TreeNode node) {
	if(node == null) return null;
	if(node.parent==null || node.right != null) {
		// find left most child in right sub tree
		TreeNode next = node.right;
		while(next.left != null) next = next.left;
		return next;
	} else {
		// go up until we are on the left side of parent node
		TreeNode p = node.parent;
		while(p != null && p.left != node) {
			node = p;
			p = p.parent;
		}
		return p;
	}
}

  

如果没有父节点的话,可以这么做:

public TreeNode findNext(TreeNode root, TreeNode node) {
	if(root == null || node == null) return null;
	if(node.right != null) {
		TreeNode n = node.right;
		while(n.left != null) {
			n = n.left;
		}
		return n;
	}
	TreeNode n = null;
	while(root != null) {
		if(root.val > node.val) {
			n = root;
			root = root.left;
		} else if(root.val < node.val) {
			root = root.right;
		} else {
			break;
		}
	}
	return n;
}

 

Reference:

http://www.geeksforgeeks.org/inorder-successor-in-binary-search-tree/

分享到:
评论

相关推荐

    450. Delete Node in a BST【LeetCode单题讲解系列】

    450._Delete_Node_in_a_BST【LeetCode单题讲解系列】

    bst.rar_bst_bst tree

    return self._find(node.left, key) else: return self._find(node.right, key) def delete(self, key): self.root = self._delete(self.root, key) def _delete(self, node, key): if not node: return ...

    (BST24208,BST24108,BST24201,BST24212)CAN总线通讯板卡

    在本章节中,我们将深入探讨BST24108、BST24208、BST24201以及BST24212这几种型号的CAN总线通讯板卡的主要特点及其应用场景。 #### 二、BST24108 — PCI总线8通道CAN通讯卡 **主要特性:** - **PCI总线接口**:...

    GBT7714-2005NLang_Upp.bst GBT7714-2005NLang_Up.bst GBT7714-2005NLang.bst

    将bst文件放到MiKTeX的bst文件夹下自己新建的gbt7714-2005文件下,1)作者名称如 KERNER B S 的样式 GBT7714-2005NLang.bst 2)作者名称如 KERNER B S 的样式 GBT7714-2005NLang_UP.bst 3)作者名称如 Kerner B S 的...

    BST.rar_c++ tree node_read-bst-1

    `BST.rar_c++ tree node_read-bst-1`这个文件名可能是指包含了C++实现二叉搜索树节点读取的代码,具体实现可能涉及对二进制文件的读取和解析,以便于存储和恢复树的状态。 6. **应用**: 二叉搜索树广泛应用于...

    (BST23108,BST23118,BST23208,BST23218,BST23608)串口通讯系列板卡用户手册

    综上所述,BST23X08/BST23X18系列串口通讯板卡凭借其灵活的配置选项、强大的功能以及广泛的兼容性,在工业自动化领域展现出了极高的实用价值。无论是对于初学者还是资深工程师而言,掌握这些核心知识点都是十分必要...

    BST_javaBST_https://bst.91_bstcom_

    在Java中实现BST,我们需要定义一个Node类来表示树的节点,这个Node通常会有key、value、left和right属性,分别代表键、值、左子节点和右子节点。以下是一个简单的Java二分搜索树节点类的实现: ```java public ...

    CBST.rar_The Keys_bst

    The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node contains only nodes with keys greater than or equal to the node's key. Both the left ...

    BST.zip_C++

    Node* BST::search(int value) { return searchRec(root, value); } Node* searchRec(Node* node, int value) { if (node == nullptr || node-&gt;data == value) return node; return value &lt; node-&gt;data ? ...

    GBT7714-2005NLang.bst样式文件

    《GBT7714-2005NLang.bst样式文件详解与应用》 在学术研究和出版领域,正确引用参考文献是至关重要的。中国国家标准GB/T 7714-2005《文后参考文献著录规则》为中文文献的引用提供了统一规范。其中,`GBT7714-2005...

    BST_CPP.zip_bst

    **二叉搜索树(BST,Binary Search Tree)详解** 二叉搜索树是一种特殊的二叉树数据结构,它的每个节点都包含一个键值、一个指向左子节点的指针和一个指向右子节点的指针。在二叉搜索树中,对于任意节点,其左子树...

    BST纠偏调试步骤

    ### BST纠偏调试步骤详解 #### 一、纠偏镜头界面解释 纠偏镜头界面是BST纠偏系统的重要组成部分,用于实时监控物料的运行状态,并根据实际情况调整相机参数以达到最佳检测效果。以下是对该界面各部分含义的详细...

    BST纠偏系统调试手册.pdf

    BST纠偏系统调试手册.pdf

    BST.rar_bst

    二叉搜索树(Binary Search Tree,BST)是一种自平衡的二叉查找树,它具有以下特性:对于树中的任意一个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中所有节点的值都大于该节点的值。这种数据结构在...

    bst.zip_bst_二叉查找树

    二叉查找树(Binary Search Tree,BST),也称为二叉排序树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键值、一个指向左子树的指针和一个指向右子树的指针。在二叉查找树中,对于任意节点,其左子树中的...

    数据结构二叉树BST源代码

    二叉搜索树(Binary Search Tree,简称BST)是一种特殊的二叉树数据结构,它具有以下特性: 1. 每个节点包含一个键(key)、一个关联的值、一个指向左子节点的引用和一个指向右子节点的引用。 2. 节点的键大于其左...

    C++实现二叉搜索树(BST),通过控制台能够实现增删改查

    二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树结构,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的指针和一个指向右子树的指针。在二叉搜索树中,对于任何节点,其左子树中的所有...

    bst-4wd+V4.0发行版1

    根据提供的信息,我们可以了解到这是一份关于bst-4wd+V4.0发行版1的文档,主要关注的是与stm32微控制器相关的硬件设计细节。由于提供的文档内容较为复杂且部分信息不易解读,以下将重点围绕标题、描述以及部分可见...

    Latex修改参考文献展示方式:修改apsrev4-1.bst文件

    Latex修改参考文献展示方式:修改apsrev4-1.bst文件 Latex是一种基于TeX的排版系统,广泛应用于学术论文、技术文档、图书出版等领域。其中,参考文献的展示方式是 Latex 的一个重要组成部分。本文将介绍如何修改...

    从BST到SBT

    void Insert(Node* &x, Node *z) { if (x == nullptr) { x = z; } else if (z-&gt;key &lt; x-&gt;key) { Insert(x-&gt;left, z); if (GetSize(x-&gt;left) &gt; GetSize(x-&gt;right) + 1) { RotateRight(x); // 右旋 } } else {...

Global site tag (gtag.js) - Google Analytics