二叉樹 力扣刷題

2021-10-12 12:47:38 字數 1856 閱讀 4463

把二叉樹上的每乙個節點的左右子節點進行交換

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

}

給定乙個 完美二叉樹 ,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下:

struct node

填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。

初始狀態下,所有 next 指標都被設定為 null。

輸入:root = [1,2,3,4,5,6,7]

輸出:[1,#,2,3,#,4,5,6,7,#]

解釋:給定二叉樹如圖 a 所示,你的函式應該填充它的每個 next 指標,以指向其下乙個右側節點,如圖 b 所示。序列化的輸出按層序遍歷排列,同一層節點由 next 指標連線,'#' 標誌著每一層的結束。

解法一(超時)安排兩個節點,「將每一層二叉樹節點連線起來」可以細化成「將每兩個相鄰節點都連線起來」

// 主函式

node connect(node root)

// 輔助函式

void connecttwonode(node node1, node node2)

/**** 前序遍歷位置 ****/

// 將傳入的兩個節點連線

node1.next = node2;

// 連線相同父節點的兩個子節點

connecttwonode(node1.left, node1.right);

connecttwonode(node2.left, node2.right);

// 連線跨越父節點的兩個子節點

connecttwonode(node1.right, node2.left);

}

解法二詳解看這個:

class solution 

void dfs(node root)

node left = root.left;

node right = root.right;

//以root為起點,將整個縱深這段串聯起來

while(left!=null)

//遞迴的呼叫左右節點,完成同樣的縱深串聯

1、將root的左子樹和右子樹拉平。

2、將root的右子樹接到左子樹下方,然後將整個左子樹作為右子樹。

/**

* definition for a binary tree node.

* public class treenode

* treenode(int val)

* treenode(int val, treenode left, treenode right)

* }*/class solution

p.right = right;}}

參考:

力扣刷題 合併二叉樹

題目描述 給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。算是第一次正式用力扣刷題,思路上是有想法的,但回...

刷題39 二叉樹的直徑 力扣)

題目鏈結題目描述 給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹1 2 3 4 5返回 3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。關鍵技術 df...

資料結構二叉樹(c ,力扣刷題)

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。暴力解法 definition for a binary tree node.struct treenode class solution int numleft k vector int ...