跳过正文
  1. 文章/

LeetCode.二叉树

·113 字·1 分钟·
Hassenfeld
作者
Hassenfeld
Viva La Vida
LeetCode - 这篇文章属于一个选集。
§ 2: 本文

二叉树,包含:

  1. 节点元素;
  2. 指向子节点的指针Left
  3. 指向另一个子节点的指针Right

leetcode树表示方法:

struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

leetcode104.二叉树的最大深度
#

int maxDepth(TreeNode* root) {
	if(root==nullptr){
		return 0;
	}
	return max(maxDepth(root->left),maxDepth(root->right))+1;
}
  • 先递归计算左右子树的深度 #递归
  • max()返回最大深度+1

leetcode226.反转二叉树
#

TreeNode* invertTree(TreeNode* root) {
	if(root==nullptr){
		return nullptr;
	}
	TreeNode* temp;
	temp=root->left;
	root->left=root->right;
	root->right=temp;
	invertTree(root->left);
	invertTree(root->right);
	return root;
}

考虑递归遍历二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

leetcode101.对称二叉树
#

bool isSymmetric(TreeNode* root) {
	if(root==nullptr){
		return true;
	}
	return isMirror(root->left,root->right);
}
bool isMirror(TreeNode* root1,TreeNode* root2){
	if(root1==nullptr&&root2==nullptr){
		return true;
	}
	if(root1==nullptr||root2==nullptr||root1->val!=root2->val){
		return false;
	}
	return(isMirror(root1->left,root2->right)&&isMirror(root1->right,root2->left));
 }
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

函数isSymmetric() :

  • 特例处理: 若根节点 root 为空,则直接返回 true ;
  • 返回值: 即 isMirror(root->left,root->right)

函数isMirror()

  • 先判断当前左右两个节点是否满足对称;
  • 再判断这两个节点的子节点L.leftR.right 是否对称,L.right 和 R.left 是否对称。 #递归 ![[对称二叉树.png|697]]

LeetCode - 这篇文章属于一个选集。
§ 2: 本文