大家好,我正在学习二叉树,并在学习基础知识方面取得了进步。现在我正在学习AVL并编写代码来平衡我的树。但是我遇到了与根节点(树的父节点)不平衡的障碍。我计划在节点类中添加父节点以跟踪父节点,但不知道用父节点实现AVL树。请有人展示一个例子会非常有帮助。
节点类:
public class BinaryNode<T> {
private BinaryNode<T> parent;
private BinaryNode<T> leftChild;
private BinaryNode<T> rightChild;
private int height;
private T data;
public BinaryNode(T data) {
this(data, null,null,null,0)'
}
public BinaryNode(T data, BinaryNode<T> parent, BinaryNode<T> leftChild, BinaryNode<T> rightChild, int height) {
this.data=data;
this.parent = parent;
this.leftChild= leftChild;
this.rightChild = rightChild;
this.height = 0;
}
AVL树:
public class AVLTree {
protected BinaryNode<T> root;
public AVLTree() {}
public AVLTree(T data) {
root = new BinaryNode<T>(data);
}
public void insert(T data) {
BinaryNode<T> newNode = new BinaryNode<T>(data);
if(root == null){
root = newNode;
}
else {
insert(root, newNode);
}
}
如何跟踪父节点。父节点应该是添加到列表中的第一个元素。下一个节点是它的子节点或后代。如何使用父节点实现binaryTree。一个例子非常有用,谢谢。
答案 0 :(得分:1)
既然你正在学习,我会尝试指出你正确的方向,而不是给你代码。通常做的是不要跟踪&#34;跟踪&#34;完全是父节点。节点通常仅存储他们的后代(左和右孩子)。可以在递归地向下移动树的过程中找到父信息。这有帮助吗?