一、树的遍历
其实深度优先遍历:是指先序、中序和后序,广度优先就是层序遍历。
①、先序遍历
void PreOrder(BTNode *b)
{if(b != NULL){std::cout << b->data << std::endl;PreOrder(b->left);PreOrder(b->right);}
}
②、中序遍历
void PreOrder(BTNode *b)
{if(b != NULL){PreOrder(b->left);std::cout << b->data << std::endl;PreOrder(b->right);}
}
③、后序遍历
void PreOrder(BTNode *b)
{if(b != NULL){PreOrder(b->left);PreOrder(b->right);std::cout << b->data << std::endl;}
}
④、层序遍历
void printTree(BinaryTree* arr[])
{queue<BinaryTree*> rel; //定义一个队列,数据类型是二叉树指针,不要仅是int!!不然无法遍历rel.push(arr[0]);while (!rel.empty()){BinaryTree* front = rel.front();printf("%d\n", front->vec);rel.pop(); //删除最前面的节点if (front->left != nullptr) //判断最前面的左节点是否为空,不是则放入队列rel.push(front->left); if (front->right != nullptr)//判断最前面的右节点是否为空,不是则放入队列rel.push(front->right);}
}
引入一个笔试题:将vector中的一个完全二叉树按照层序构建为一个新的树。