无parent成员
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//递归
//时间复杂度O(logN),空间复杂度O(logN)
public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
if(p == null || root == null) return null;
if(root.val <= p.val) return inorderSuccessor(root.right, p);
TreeNode ans = inorderSuccessor(root.left, p);
if(ans != null && ans.val < root.val) return ans;
else return root;
}
}
class Solution {
//时间复杂度O(logN),空间复杂度O(1)
public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
if(p == null || root == null) return null;
TreeNode cur = root;
TreeNode ans = null;
while(cur != null){
if(cur.val <= p.val){
cur = cur.right;
}else{
if(ans == null || ans.val > cur.val) ans = cur;
cur = cur.left;
}
}
return ans;
}
}
有parent成员
public class BinNode{
int value;
BinNode left;
BinNode right;
BinNode parent;
public BinNode(int value){
this.value = value;
}
}
public class BinTree{
public BinNode nodeSucc(BinNode node){
if(node.right){ // 若有右节点
node = node.right;
while(node.left) node = node.left; // 获取右子树的最左节点
}else{
while(node.parent.left != node){ // 如果该节点为父节点的右节点
node = node.parent; // 将节点变为父节点
if(!node.parent) break; // 若到达根节点,退出
}
node = node.parent;
}
return node;
}
}
二叉树中序后继
最新推荐文章于 2024-09-15 09:47:04 发布
文章介绍了两种方法在二叉树中寻找某个节点的中序后继节点。第一种是递归方式,通过比较节点值来决定在左子树还是右子树中继续查找。第二种是迭代方式,通过遍历节点的左右子树和父节点来找到后继节点。两种方法的时间复杂度均为O(logN)。
摘要由CSDN通过智能技术生成