如何在n不使用递归的情况下遍历-ary树?
n
递归方式:
traverse(Node node) { if(node == null) return; for(Node child : node.getChilds()) { traverse(child); } }
您可以执行此操作而无需递归且没有堆栈。但是您需要向该节点添加两个额外的指针:
当前的子节点,因此您知道接下来要使用哪一个。
使用伪代码,它看起来像:
traverse(Node node) { while (node) { if (node->current <= MAX_CHILD) { Node prev = node; if (node->child[node->current]) { node = node->child[node->current]; } prev->current++; } else { // Do your thing with the node. node->current = 0; // Reset counter for next traversal. node = node->parent; } } }