C++实现判断二叉树是否对称
1. 二叉树的实现
struct TreeNode {
TreeNode() : m_val(0), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val) : m_val(val), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val, TreeNode* left_node, TreeNode* right_node) : m_val(val), m_left_node(left_node), m_right_node(right_node) { }
int m_val;
TreeNode* m_left_node;
TreeNode* m_right_node;
};
2. 递归判断二叉树是否对称
bool TraversalResult(TreeNode* left, TreeNode* right) {
if (!left && !right) return true;
else if (!left && right) return false;
else if (left && !right) return false;
else if (left->m_val != right->m_val) return false;
bool left_result = TraversalResult(left->m_left_node, right->m_right_node);
bool right_result = TraversalResult(left->m_right_node, right->m_left_node);
return left_result && right_result;
}
3. 整体代码
#include <iostream>
struct TreeNode {
TreeNode() : m_val(0), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val) : m_val(val), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val, TreeNode* left_node, TreeNode* right_node) : m_val(val), m_left_node(left_node), m_right_node(right_node) { }
int m_val;
TreeNode* m_left_node;
TreeNode* m_right_node;
};
class Solution {
public:
bool Traversal(TreeNode* root) {
if (!root) return true;
return TraversalResult(root->m_left_node, root->m_right_node);
}
bool TraversalResult(TreeNode* left, TreeNode* right) {
if (!left && !right) return true;
else if (!left && right) return false;
else if (left && !right) return false;
else if (left->m_val != right->m_val) return false;
bool left_result = TraversalResult(left->m_left_node, right->m_right_node);
bool right_result = TraversalResult(left->m_right_node, right->m_left_node);
return left_result && right_result;
}
void FreeSpace(TreeNode* root) {
if (!root) return;
if (root->m_left_node) FreeSpace(root->m_left_node);
if (root->m_right_node) FreeSpace(root->m_right_node);
delete root;
}
};
int main() {
TreeNode* root = new TreeNode(5, new TreeNode(6, new TreeNode(8), NULL), new TreeNode(6, NULL, new TreeNode(8)));
Solution solution;
std::cout << solution.Traversal(root) << std::endl;
solution.FreeSpace(root);
return 0;
}