非递归遍历二叉树(算法导论第三版第十章10.4-5)
template<typename T>
void TraverseBinaryTreeNonRecursive(BinaryTreeNode<T>* root)
{BinaryTreeNode<T>* prev = nullptr;BinaryTreeNode<T>* current = root;while (current!= nullptr){if(prev == current->parent){std::cout<<current->key<<" ";prev = current;if(current->left!= nullptr){current = current->left;}else{if(current->right!= nullptr){current = current->right;}elsecurrent = current->parent;}}else if(prev == current->left && current->right!= nullptr){prev = current;current = current->right;}else{prev = current;current = current->parent;}}cout<<endl;
}
辅助类
BinaryTreeNode
链接地址
测试代码
BinaryTreeNode<int> *root = new BinaryTreeNode<int>(18);BinaryTreeNode<int> *node1 = new BinaryTreeNode<int>(12,root);BinaryTreeNode<int> *node2 = new BinaryTreeNode<int>(10,root);BinaryTreeNode<int> *node3 = new BinaryTreeNode<int>(7,node1);BinaryTreeNode<int> *node4 = new BinaryTreeNode<int>(4,node1);BinaryTreeNode<int> *node5 = new BinaryTreeNode<int>(2,node2);BinaryTreeNode<int> *node6 = new BinaryTreeNode<int>(21,node2);BinaryTreeNode<int> *node7 = new BinaryTreeNode<int>(5,node4);root->left = node1;root->right = node2;node1->left = node3;node1->right = node4;node2->left = node5;node2->right = node6;node4->left = node7;TraverseBinaryTreeNonRecursive(root);