二叉树相关题(Java实现)
生活随笔
收集整理的這篇文章主要介紹了
二叉树相关题(Java实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉樹練題總結,不定時更新
素材來自牛客網,參考題解已附注超鏈接,侵刪? 聯系郵箱:zhenyu_li1998@163.com
二叉樹先序中序后序遍歷
實現二叉樹先序,中序和后序遍歷_牛客題霸_??途W
?遞歸遍歷即可
import java.util.*;/** public class TreeNode {* int val = 0;* TreeNode left = null;* TreeNode right = null;* }*/public class Solution {/*** * @param root TreeNode類 the root of binary tree* @return int整型二維數組*/private List<Integer> list = new ArrayList<>();public int[][] threeOrders (TreeNode root) {// write code hereif(root == null){return new int[3][0];}preOrder(root);midOrder(root);afterOrder(root);//定義返回數組長度,子數組長度為list的1/3int[][] res = new int[3][list.size() / 3];int index = 0;for(int i = 0; i < 3; i++){for(int j = 0; j < list.size() / 3; j++){res[i][j] = list.get(index);index++;}}return res;}//根左右public void preOrder(TreeNode root){if(root == null){return;}list.add(root.val);preOrder(root.left);preOrder(root.right);}//左根右public void midOrder(TreeNode root){if(root == null){return;}midOrder(root.left);list.add(root.val);midOrder(root.right);}//左右根public void afterOrder(TreeNode root){if(root == null){return;}afterOrder(root.left);afterOrder(root.right);list.add(root.val);} }二叉樹層序遍歷
求二叉樹的層序遍歷_??皖}霸_牛客網
?
利用隊列先進先出的性質存儲依次存儲每層節點并加入隊列用于返回
1.先判斷根節點;為空則直接返回空的數組;不為空則加入隊列進行遍歷;
2.遍歷次數為隊列長度,出隊后加入數組,并將其左右孩子節點加入隊列;因為隊列長度在每次遍歷前由一個變量更新存儲且隊列先進先出,因此加入孩子節點不會影響當前(此層)遍歷結果;
3.每次遍歷完成后將當前數組以子數組形式加入定義的返回數組,然后判斷隊列是否為空(如果沒孩子節點加入自然為空)再進行2操作或退出循環返回父數組
import java.util.*; /** public class TreeNode {* int val = 0;* TreeNode left = null;* TreeNode right = null;* }*/ public class Solution {/*** * @param root TreeNode類 * @return int整型ArrayList>*/public ArrayList> levelOrder (TreeNode root) {// write code hereQueue que = new ArrayDeque();if(root != null){que.add(root);}ArrayList> res = new ArrayList();while(!que.isEmpty()){ArrayList list = new ArrayList(); // 遍歷隊列將其中的元素加入數組(層序遍歷)int n = que.size();for(int i = 0; i < n; i++){TreeNode node = que.poll();list.add(node.val); // 將當前節點的左右孩子節點加入隊列if(node.left != null){que.add(node.left);}if(node.right != null){que.add(node.right);}} // 將每層的元素以子數組形式加入新的數組res.add(list);}return res;} }判斷二叉樹對稱
判斷二叉樹是否對稱_牛客題霸_牛客網?
?判斷二叉樹是否對稱【遞歸】【迭代】詳解!
正是因為要遍歷兩棵樹而且要比較內側和外側節點,所以準確的來說是一個樹的遍歷順序是左右中,一個樹的遍歷順序是右左中。
但都可以理解算是后序遍歷,盡管已經不是嚴格上在一個樹上進行遍歷的后序遍歷了。
迭代實現: 通過隊列來判斷根節點的左子樹和右子樹的內側和外側是否相等。同樣也可以通過棧來存儲節點出棧對比
public boolean isSymmetric (TreeNode root) {// write code hereif(root == null) return true;Queue<TreeNode> que = new LinkedList<>();// 將左右子樹頭結點加入隊列que.offer(root.left); que.offer(root.right);while(!que.isEmpty()){TreeNode leftNode = que.poll();TreeNode rightNode = que.poll();// 左節點為空、右節點為空,此時說明是對稱的if(leftNode == null && rightNode == null){continue;}// 左右一個節點不為空 或者都不為空但數值不相同,返回falseif(leftNode == null || rightNode == null || (leftNode.val != rightNode.val)){return false;}// 加入左節點左孩子 右節點右孩子 * 左節點右孩子 加入右節點左孩子que.offer(leftNode.left);que.offer(rightNode.right);que.offer(leftNode.right);que.offer(rightNode.left);}return true;}總結
以上是生活随笔為你收集整理的二叉树相关题(Java实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邓仰东专栏|机器学习的那些事儿(一)
- 下一篇: Java奇谈