二叉樹的基本操作
- 1.獲取樹中節點的個數
- 1.1 計數器遞歸的思路
- 1.2 子問題思路:
- 2. 獲取葉子個數
- 3. 獲取第k層節點的個數
- 4.獲取二叉樹的高度
- 5.檢測值為value的元素是否存在
1.獲取樹中節點的個數
思路:整棵樹的節點個數 = 左子樹的節點個數+右子樹的節點個數+根本身一個。
1.1 計數器遞歸的思路
定義一個計數器nodesize,先++然后遍歷二叉樹左子樹和右子樹。
public int nodesize;int size(TreeNode root) {if(root == null) {return 0;}nodesize++;size(root.left);size(root.right);return nodesize;}
1.2 子問題思路:
整棵樹的節點個數 =左子樹的節點個數+右子樹的節點個數+根本身一個。
int size2(TreeNode root) {if (root == null) {return 0;}return size2(root.left) + size2(root.right) + 1;}
2. 獲取葉子個數
思路:整棵樹的葉子 = 左子樹的葉子+右子樹的葉子。
int getLeafNodeCount(TreeNode root) {if (root == null) {return 0;}if(root.left ==null && root.right == null) {return 1;}return getLeafNodeCount(root.left) + getLeafNodeCount(root.right);}
3. 獲取第k層節點的個數
思路:整棵樹的第k層多少個節點 = 左子樹的第k-1個節點 + 右子樹的第k-1層節點;
如 k = 3 A 這顆樹的第三層 = A左樹(B)的第二層 + A右樹(C)的第二層;
第一層只有一個節點 B左樹的第一層+B右樹的第一層 C左樹的第一層+右第一層。
int getKLevelNodeCount(TreeNode root,int k) {if (root == null) {return 0;}if(k == 1) {return 1;}return getKLevelNodeCount(root.left,k-1) +getKLevelNodeCount(root.right,k-1);}
4.獲取二叉樹的高度
思路:整棵樹的高度 = 左子樹的高度 和右子樹的高度的最大值 + 1。
int getHeight(TreeNode root){if(root == null) {return 0;}int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);return leftHeight > rightHeight ? leftHeight + 1:rightHeight + 1;}
5.檢測值為value的元素是否存在
思路:按照根 - 左 - 右的前序遍歷進行遍歷,1.是否為空樹;2.根的值是不是;3.左子樹;4.右子樹;
TreeNode find(TreeNode root,char val) {if(root == null){return null;}if(root.val == val) {return root;}TreeNode ret1 = find(root.left,val);if (ret1 != null) {return ret1;}TreeNode ret2 = find(root.right,val);if (ret2 != null) {return ret2;}return null;}