我没有完全考虑过,但我认为只要你愿意在这个过程中搞砸你的树,这是可能的。
每个节点都有 2 个指针,因此它可用于表示双链表。假设您从 Root 升级到 Root.Left=Current。现在 Root.Left 指针是无用的,因此请将其指定为 Current.Right 并继续执行 Current.Left。当你到达最左边的孩子时,你会有一个链接列表,上面挂着一些节点上的树。现在迭代它,在你前进的过程中对你遇到的每棵树重复这个过程
编辑:想通了。以下是按顺序打印的算法:
void traverse (Node root) {
traverse (root.left, root);
}
void traverse (Node current, Node parent) {
while (current != null) {
if (parent != null) {
parent.left = current.right;
current.right = parent;
}
if (current.left != null) {
parent = current;
current = current.left;
} else {
print(current);
current = current.right;
parent = null;
}
}
}