(递归)二叉树的常见面试专题

it2023-11-03  80

二叉树的高度:

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:

给定二叉树 [3,9,20,null,null,15,7],

返回它的最大深度 3 。

思路:每个节点的高度=max(左节点高度,右节点高度)+1

class Solution { public: int maxDepth(TreeNode* root) { if(root==NULL) return 0; int left_high=maxDepth(root->left); int right_high=maxDepth(root->right); return left_high>right_high ? left_high+1: right_high+1; } };

平衡二叉树 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

给定二叉树 [3,9,20,null,null,15,7] 返回 true 。

思路:从上到下,依次看节点的左右节点是否高度相差小于2.

class Solution { private: int maxDepth(TreeNode* root) { if(root==NULL) return 0; int left_high=maxDepth(root->left); int right_high=maxDepth(root->right); return left_high>right_high ? left_high+1: right_high+1; } public: bool isBalanced(TreeNode* root) { if(root==NULL) return true; int left_hight=maxDepth(root->left); int right_hight=maxDepth(root->right); return abs(left_hight-right_hight)<=1&&isBalanced(root->left)&&isBalanced(root->right); } };

剑指 Offer 27. 二叉树的镜像二叉树的镜像

请完成一个函数,输入一个二叉树,该函数输出它的镜像。 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]

思路:从上到下,每次交换左右子节点

class Solution { public: TreeNode* mirrorTree(TreeNode* root) { if(root==NULL) return NULL; swap(root->left,root->right); root->left=mirrorTree(root->left); root->right=mirrorTree(root->right); return root; } };

对称二叉树左子树的 这题和镜像二叉树一定要注意题意。

思路:依次判断左子树的值和右子树的值相同,如果相同,判断左子树的左子树的值右子树的右子树的值?&&左子树的右子树的值右子树的的左子树的值。

class Solution { private: bool _isSymmetric( TreeNode *left_childern, TreeNode *right_childern) { if(left_childern==NULL&&right_childern==NULL)//前面都已经为true了,最后同时到达末尾 { return true; } // ||的使用一定要明白 ==》left_childern->val!=right_childern->val 前提是 left_childern!=NULL&&right_childern!=NULL if(left_childern==NULL|| right_childern==NULL|| left_childern->val!=right_childern->val)// { return false; } return _isSymmetric(left_childern->left,right_childern->right)&&_isSymmetric(left_childern->right,right_childern->left); } public: bool isSymmetric(TreeNode* root) { if(root==NULL) return true; return _isSymmetric(root->left,root->right); } };
最新回复(0)