La classe TreeNode
est définie avec uniquement les enfants gauche et droit.BST, est-il possible de trouver le plus bas suivant dans O (lg N)?
public class TreeNode {
public int val;
public TreeNode left, right;
public TreeNode(int val) {
this.val = val;
}
}
Mon code trouve le nœud le plus bas suivant dans O (n). Je me demandais s'il était possible de le trouver dans lg (N) étant donné que le nœud n'a pas de pointeur vers son nœud parent.
// run time O(n)
public static Integer findNextLowest(TreeNode root, int target) {
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while (cur != null || stack.size() > 0) {
while (cur != null) {
stack.push(cur);
cur = cur.right;
}
TreeNode node = stack.pop();
if (node.val < target) return node.val; // found the next lowest
cur = node.left;
}
return null;
}
merci pour le code, mais je ne pense pas que cela fonctionne. Si vous utilisez cet arbre ici https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Binary_search_tree.svg/200px-Binary_search_tree.svg.png et utilisez la valeur cible '9'. Votre code renvoie null; – TonyGW
Salut Tony, si la valeur cible est 9, le code entre dans la boucle "while (node.val
Protocol
l'avez-vous exécuté avec l'arbre que j'ai mentionné? Pour vous faciliter la tâche: TreeNode root = new TreeNode (8); root.left = nouveau TreeNode (3); root.right = new TreeNode (10); root.left.left = nouveau TreeNode (1); root.left.right = nouveau TreeNode (6); root.left.right.left = new TreeNode (4); root.left.right.right = new TreeNode (7); root.right.right = new TreeNode (14); root.right.left = new TreeNode (13); – TonyGW