本文主要是介绍二叉树,先序遍历、中序遍历、后序遍历和层序遍历实现 C++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
二叉树基类声明
template<typename T>class Tree{protected:Tree() = default;virtual ~Tree() = default;virtual const Tree& root()const = 0;virtual Tree& root() = 0;virtual const Tree& left()const = 0;virtual const Tree& right()const = 0;virtual Tree& left() = 0 ;virtual Tree& right() = 0;virtual const T& data()const = 0;virtual T& data() = 0;virtual bool valid()const { return false };};
遍历算法
template<typename T, typename Fun>void preorderTraversal(const Tree<T>& node, Fun fun){if (!node.valid())return;if (fun(node.data()))return;preorderTraversal(node.left(), fun);preorderTraversal(node.right(), fun);}template<typename T, typename Fun>void inorderTraversal(const Tree<T>& node, Fun fun){if (!node.valid())return;inorderTraversal(node.left(), fun);if (fun(node.data()))return;inorderTraversal(node.right(), fun);}template<typename T, typename Fun>void postorderTraversal(const Tree<T>& node, Fun fun){if (!node.valid())return;postorderTraversal(node.left(), fun);postorderTraversal(node.right(), fun);if (fun(node.data()))return;}template<typename T, typename Fun>void levelTraversal(const Tree<T>& root, Fun fun){SQueue<Tree<T>*> queue;queue.enqueue(&root);while (!queue.isEmpty()){Tree<T>* node = queue.dequeue();if(!node->valid())continue;if (fun(node->data()))return;if(node->left().valid())queue.enqueue(&node->left());if (node->right().valid())queue.enqueue(&node->right());}}
为学习数据结构编写,容器可能存在问题。有建议可以留言指出,谢谢。
GitHub
这篇关于二叉树,先序遍历、中序遍历、后序遍历和层序遍历实现 C++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!