当前位置: 首页 > article >正文

C++ 二叉树代码

二叉树代码,见下

#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;
    }
};


http://www.kler.cn/a/570106.html

相关文章:

  • SQL 中为什么参数多了not in 比 in 慢多了,怎么优化
  • Linux常见操作命令
  • AI 赋能 RPA:一键生成热点话题文章的奥秘
  • c++ accumulate、find、count、fill、fill_n、copy、sort、unique 泛型算法
  • 【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】
  • 算法-回溯篇02-组合总和 III
  • LeetCode hot 100—矩阵置零
  • Python:全方位赋能,开启科技前沿无限可能
  • Ubuntu20.04 ros-noetic下opencv多版本问题may conflict with libopencv_highgui.so.4.2
  • 鸿蒙NEXT开发-华为账号服务
  • MATLAB CVX 能处理的目标函数数量级极限是多少?
  • 【后端】Flask vs Django vs Node.js 对比分析
  • 数据结构——哈希表的实现
  • unity接入阿里云语音转文字,文字转语音功能
  • 知识库适配DeepSeek,企业微信支持自动登录,授权支持过期时间设置,zyplayer-doc 2.4.9 发布啦!
  • 一个开源且免费的 .NET CMS 和应用程序框架
  • 洛谷————P1634 禽兽的传染病
  • 实验室预约小程序
  • GreptimeDB v0.12 发布,开源 Rust 时序数据库
  • Thinkphp6 应用RdKafka插件封装工具类