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

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

相关文章:

  • 机器分类的基石:逻辑回归Logistic Regression
  • React Portals深度解析:突破组件层级的渲染艺术
  • 计算机毕业设计SpringBoot+Vue.js景区民宿预约系统(源码+文档+PPT+讲解)
  • 原生AJAX和jQuery的Ajax区别
  • xss自动化扫描工具-DALFox
  • Linux:程序翻译
  • 常见报错及解决方案
  • 自然语言处理:文本表示
  • Android应用开发面试题
  • 深度解析Ant Design Pro 6开发实践
  • Flink怎么搞CDC?
  • 哈工大 计算机组成原理 第四章 存储器(上)笔记
  • vue3学习-1(基础)
  • Electron + Vite + React + TypeScript 跨平台开发实践指南
  • 代码随想录算法【Day61】
  • Python大数据处理实验报告(二)
  • 2.数据结构:3.合并集合
  • C语言:51单片机 基础知识
  • 不能初始化photoshop,因为暂存盘已满
  • LeetCode 72 - 编辑距离 (Edit Distance)
  • 民间打拐志愿者上官正义遭人身安全威胁,杭州公安:已立案
  • 《五行令》《攻守占》,2个月后国博见
  • 最高人民法院原副院长唐德华逝世,享年89岁
  • 不是10点!乌克兰官员称尚未就俄乌谈判开始时间达成一致
  • 长三角首次,在铁三赛事中感受竞技与生态的共鸣
  • 上海145家博物馆、73家美术馆将减免费开放