【数据结构】二叉树OJ

📅 2026/7/18 7:59:54
【数据结构】二叉树OJ
目录1.LeetCode965.单值二叉树965. 单值二叉树 - 力扣LeetCode解题思路C语音代码2.LeetCode100.相同的树100. 相同的树 - 力扣LeetCode解题思路C语言代码3.LeetCode101.对称二叉树101. 对称二叉树 - 力扣LeetCode解题思路C语言代码4.LeetCode144.二叉树的前序遍历144. 二叉树的前序遍历 - 力扣LeetCode解题思路C语言代码5.LeetCode94.二叉树的中序遍历94. 二叉树的中序遍历 - 力扣LeetCodeC语言代码6.LeetCode145.二叉树的后序遍历145. 二叉树的后序遍历 - 力扣LeetCodeC语言代码7.LeetCode572.另一棵树的子树572. 另一棵树的子树 - 力扣LeetCode解题思路C语言代码8.牛客TSINGK110 二叉树遍历二叉树遍历_牛客题霸_牛客网C语言代码1.LeetCode965.单值二叉树965. 单值二叉树 - 力扣LeetCode解题思路将二叉树分为根节点和左右子树递归判断二叉树中所有子树的结点是否相等如果不同则返回false判断完全部结点说明全部结点的值都相等返回trueC语音代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool isUnivalTree(struct TreeNode* root) { if(root NULL){ return true; } if((root-left root-left-val ! root-val)||(root - right root-right-val ! root-val)){ return false; } return isUnivalTree(root-left)isUnivalTree(root-right); }2.LeetCode100.相同的树100. 相同的树 - 力扣LeetCode解题思路当两棵树的根节点都为空时两棵树一定相同返回true当两棵树中有一棵为空另一棵不为空时两棵树一定不相同返回false当两棵树都不为空时依次比较根节点和左右子树是否相同。C语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool isSameTree(struct TreeNode* p, struct TreeNode* q) { if(p NULL q NULL){ return true; } if(p NULL || q NULL){ return false; } if(p-val ! q-val){ return false; } return isSameTree(p-left,q-left) isSameTree(p-right,q-right); }3.LeetCode101.对称二叉树101. 对称二叉树 - 力扣LeetCode解题思路一棵树是否对称与根节点无关所以可以忽略根节点判断根节点的左右子树是否是对称的即可。本题代码与100相同的树非常相似只是在递归调用时参数由p的左子树和q的左子树、p的右子树和q的右子树比较变为p的左子树和q的右子树、q的右子树和q的左子树比较。C语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool _isSymmetric(struct TreeNode* p,struct TreeNode* q) { if(p NULL q NULL){ return true; } if(p NULL || q NULL){ return false; } if(p - val ! q - val){ return false; } return _isSymmetric(p-left,q-right) _isSymmetric(p-right,q-left); } bool isSymmetric(struct TreeNode* root) { return _isSymmetric(root-left,root-right); }4.LeetCode144.二叉树的前序遍历144. 二叉树的前序遍历 - 力扣LeetCode解题思路题目要求返回前序遍历的数组所以遍历二叉树时进行的操作就是将数据存入数组。C语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * Note: The returned array must be malloced, assume caller calls free(). */ int treeSize(struct TreeNode* root){ if(root NULL){ return 0; } return treeSize(root-left) treeSize(root-right) 1; } void preOrder(struct TreeNode* root,int* a,int* pi){ if(root NULL){ return; } a[(*pi)] root-val; preOrder(root-left,a,pi); preOrder(root-right,a,pi); } int* preorderTraversal(struct TreeNode* root, int* returnSize) { *returnSize treeSize(root); int* a (int*)malloc(sizeof(int)*(*returnSize)); int i 0; preOrder(root,a,i); return a; }5.LeetCode94.二叉树的中序遍历94. 二叉树的中序遍历 - 力扣LeetCodeC语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * Note: The returned array must be malloced, assume caller calls free(). */ int treeSize(struct TreeNode* root){ if(root NULL){ return 0; } return treeSize(root-left)treeSize(root-right)1; } void InOrder(struct TreeNode* root,int* a,int* pi){ if(root NULL){ return; } InOrder(root-left,a,pi); a[(*pi)] root-val; InOrder(root-right,a,pi); } int* inorderTraversal(struct TreeNode* root, int* returnSize) { *returnSize treeSize(root); int* a (int*)malloc(sizeof(int)*(*returnSize)); int i 0; InOrder(root,a,i); return a; }6.LeetCode145.二叉树的后序遍历145. 二叉树的后序遍历 - 力扣LeetCodeC语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * Note: The returned array must be malloced, assume caller calls free(). */ int treeSize(struct TreeNode* root){ if(root NULL){ return 0; } return treeSize(root-left)treeSize(root-right)1; } void postOrder(struct TreeNode* root,int* a,int* pi){ if(root NULL){ return; } postOrder(root-left,a,pi); postOrder(root-right,a,pi); a[(*pi)] root-val; } int* postorderTraversal(struct TreeNode* root, int* returnSize) { *returnSize treeSize(root); int* a (int*)malloc(sizeof(int)*(*returnSize)); int i 0; postOrder(root,a,i); return a; }7.LeetCode572.另一棵树的子树572. 另一棵树的子树 - 力扣LeetCode解题思路判断子树的根节点和另一颗树的结点是否相同如果相同则以相同的结点为根节点判断两棵子树是否相同。C语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool isSameTree(struct TreeNode* p,struct TreeNode* q){ if(p NULL q NULL){ return true; } if(p NULL || q NULL){ return false; } if(p-val ! q-val){ return false; } return isSameTree(p-left,q-left) isSameTree(p-right,q-right); } bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) { if(root NULL){ return false; } if(root-val subRoot-val isSameTree(root,subRoot)){ return true; } return isSubtree(root-left,subRoot) || isSubtree(root-right,subRoot); }8.牛客TSINGK110 二叉树遍历二叉树遍历_牛客题霸_牛客网C语言代码#include stdio.h typedef struct BinTree{ struct BinTree* left; struct BinTree* right; char val; }BinTree; BinTree* CreateTree(char* a, int* pi){ if(a[*pi] #){ (*pi); return NULL; } BinTree* root (BinTree*)malloc(sizeof(BinTree)); root-val a[(*pi)]; root-left CreateTree(a, pi); root-right CreateTree(a, pi); return root; } void InOrder(BinTree* root){ if(root NULL){ return; } InOrder(root-left); printf(%c ,root-val); InOrder(root-right); } int main() { char a[100]; scanf(%s,a); int i 0; BinTree* root CreateTree(a, i); InOrder(root); return 0; }完