C++二叉树代码
- 电脑硬件
- 2025-09-16 07:06:02

二叉树代码,见下
#include <iostream> using namespace std; template<typename T> struct TreeNode{ T val; TreeNode *left; TreeNode *right; TreeNode():val(0), left(NULL), right(NULL) TreeNode(T x):val(x), left(NULL), right(NULL){} }; template<typename T> class Tree(){ private: TreeNode<T> *nodes; TreeNode<T> *root; size_t nodeSize; TreeNode<T> *Create(T a[], int size, int nodeId, T nullNode); void visit(TreeNode<T> *node); void preOrder(TreeNode<T> *node); void inOrder(TreeNode<T> *node); void postOrder(TreeNode<T> *node); void levelOrder(TreeNode<T> *node); public: Tree(); Tree(int maxNodes); ~Tree(); TreeNode<T>* GetTreeNode(int id); void CreateTree(T a[], int size, T nullNode); void preOrderTraversal(); void inOrderTraversal(); void postOrderTraversal(); }; template<typename T> Tree<T>::Tree(){ nodeSize = 100001; nodes = new TreeNode<T>[nodeSize] } template<typename T> Tree<T>::Tree(int maxNodes){ nodeSize = maxNodes; nodes = new TreeNode<T>[nodeSize]; } template<typename T> TreeNode<T>* Tree<T>::GetTreeNode(int id){ return &nodes[id]; } template<typename T> void Tree<T>::visit(TreeNode<T> *node){ cout << node->val; } template<typename T> void Tree<T>::preOrder(TreeNode<T> *node){ if(node){ visit(node); preOrder(node->left); preOrder(node->right); } } template<typename T> void Tree<T>::inOrder(TreeNode<T> *node){ if(node){ inOrder(node->left); visit(node); inOrder(node->right); } } template<typename T> void Tree<T>::postOrder(TreeNode<T> *node){ if(node){ postOrder(node->left); postOrder(node->right); visit(node); } } template<typename T> void Tree<T>::CreatTree(T a[], int size, T nullnode){ root = Create(a, size, 1, nullnode); } template<typename T> TreeNode<T>* Tree<T>::Create(T a[], int size, int nodeId, T nullnode){ if(nodeId >= size || a[nodeId] == nullnode){ return NULL; } TreeNode<T> *nowNode = GetTreeNode(nodeId); nowNode->val = a[nodeId]; nowNode->left = Create(a, size, nodeId*2, nullnode); nowNode->right = Create(a, size, nodeId*2+1, nullnode); return nownode; } template<typename T> void Tree<T>::preOrderTraversal(){ preOrder(root); } template<typename T> void Tree<T>::inOrderTraversal(){ inOrder(root); } template<typename T> void Tree<T>::postOrderTraversal(){ postOrder(root); } int main() { cout << "Hello World"; return 0; }二叉树代码,对应力扣,完全二叉树的节点个数
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int countNodes(TreeNode* root) { if(root == NULL){ return 0; } int lc = countNodes(root->left); int rc = countNodes(root->right); return lc + rc + 1; } };代码练习,对应力扣单值二叉树,代码见下
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool isUnivalTree(TreeNode* root) { if(root == NULL){ return true; } if(root->left){ if(root->val != root->left->val){ return false; } if(!isUnivalTree(root->left)){ return false; } } if(root->right){ if(root->val != root->right->val){ return false; } if(!isUnivalTree(root->right)){ return false; } } return true; } };代码四,对应力扣 二叉树的前序遍历,代码见下
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<int> ret; void preorder(TreeNode *root){ if(root){ ret.push_back(root->val); preorder(root->left); preorder(root->right); } } vector<int> preorderTraversal(TreeNode* root) { ret.clear(); preorder(root); return ret; } };代码五,对应力扣,二叉树的中序遍历,代码见下
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<int> ret; void inorder(TreeNode *root){ if(root){ inorder(root->left); ret.push_back(root->val); inorder(root->right); } } vector<int> inorderTraversal(TreeNode* root) { ret.clear(); inorder(root); return ret; } };代码六,对应力扣,二叉树的后续遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { vector<int> ret; void postorder(TreeNode *root){ if(root){ postorder(root->left); postorder(root->right); ret.push_back(root->val); } } public: vector<int> postorderTraversal(TreeNode* root) { ret.clear(); postorder(root); return ret; } };代码,对应力扣,翻转二叉树,代码见下
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* invertTree(TreeNode* root) { if(root == NULL){ return NULL; } TreeNode* l = invertTree(root->left); TreeNode* r = invertTree(root->right); root->left = r; root->right = l; return root; } };