二叉树代码,见下
#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;}
};