leetcode是什么意思


輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的循環雙向鏈表。要求不能創建任何新的節點,只能調整樹中節點指針的指向。

為了讓您更好地理解問題,以下面的二叉搜索樹為例:

我們希望將這個二叉搜索樹轉化為雙向循環鏈表。鏈表中的每個節點都有一個前驅和后繼指針。對於雙向循環鏈表,第一個節點的前驅是最后一個節點,最后一個節點的后繼是第一個節點。

下圖展示了上面的二叉搜索樹轉化成的鏈表。“head” 表示指向鏈表中有最小元素的節點。

特別地,我們希望可以就地完成轉換操作。當轉化完成以后,樹中節點的左指針需要指向前驅,樹中節點的右指針需要指向后繼。還需要返回鏈表中的第一個節點的指針。

思路分析
因為是二叉查找樹,二叉查找樹的中序遍歷就是從小到大的過程,我們可以在中序遍歷頁游的過程中進行處理雙向循環鏈表,一開始先把頭節點和尾部節點連接起來。pre用於記錄雙向鏈表中位於cur左側的節點,即上一次迭代中的cur,當pre==null時,cur左側沒有節點,即此時cur為雙向鏈表中的頭節點;反之,pre!=null時,cur左側存在節點pre,需要進行pre.right=cur的操作。pre是否為null對這句沒有影響,且這句放在上面兩句if else之前也是可以的。

代碼展示
解法一:

Node head, pre;

public Node treeToDoublyList(Node root) { if(root==null) return null; dfs(root); pre.right = head; head.left =pre;//進行頭節點和尾節點的相互指向,這兩句的順序也是可以顛倒的 return head; } public void dfs(Node cur){ if(cur==null) return; dfs(cur.left); //pre用於記錄雙向鏈表中位於cur左側的節點,即上一次迭代中的cur,當pre==null時,cur左側沒有節點,即此時cur為雙向鏈表中的頭節點 if(pre==null) head = cur; //反之,pre!=null時,cur左側存在節點pre,需要進行pre.right=cur的操作。 else pre.right = cur; cur.left = pre;//pre是否為null對這句沒有影響,且這句放在上面兩句if else之前也是可以的。 pre = cur;//pre指向當前的cur dfs(cur.right);//全部迭代完成后,pre指向雙向鏈表中的尾節點 }

點擊並拖拽以移動
特定深度節點鏈表(面試題)
題目描述
給定一棵二叉樹,設計一個算法,創建含有某一深度上所有節點的鏈表(比如,若一棵樹的深度為 D,則會創建出 D 個鏈表)。返回一個包含所有深度的鏈表的數組。

示例 1:

輸入:[1,2,3,4,5,null,7,8]

    1 / \ 11 2 3 / \ \ 4 5 7

/
8
輸出:[[1],[2,3],[4,5,7],[8]]
點擊並拖拽以移動
思路分析
這道題其實可以理解成層序遍歷,若一棵樹的深度為 D,則會創建出 D 個鏈表,相當於一個二維數組,然后依次一層層遍歷下來。

代碼展示
解法一:

public ListNode[] listOfDepth(TreeNodewww.sangpi.com tree) {

 
    if(tree == null) return null; List<ListNode> list = new ArrayList<>(); Deque<TreeNode> que = new ArrayDeque<>(); que.add(tree); while(!que.isEmpty()){ int n = que.size(); ListNode dummy = new ListNode(0); ListNode cur = dummy; for(int i=0;i<n;i++){ TreeNode curTree = que.removeFirst(); cur.next = new ListNode(curTree.val);//生成新節點 cur = cur.next;//向后移動 if(curTree.left != null) que.addLast(curTree.left); if(curTree.right != null) que.addLast(curTree.right); } list.add(dummy.next); } ListNode[] res = list.toArray(new ListNode[list.size()]); return res; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM