把二叉樹上的每乙個節點的左右子節點進行交換
/**
* 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 ...