Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3334e5f

Browse files
Merge pull request youngyangyang04#2334 from eeee0717/master
Update.二叉树的递归遍历,添加C#版
2 parents 2a8c571 + 3ffca33 commit 3334e5f

7 files changed

+368
-19
lines changed

‎problems/0101.对称二叉树.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,53 @@ impl Solution {
897897
}
898898
}
899899
```
900+
### C#
901+
```C#
902+
// 递归
903+
public bool IsSymmetric(TreeNode root)
904+
{
905+
if (root == null) return true;
906+
return Compare(root.left, root.right);
907+
}
908+
public bool Compare(TreeNode left, TreeNode right)
909+
{
910+
if(left == null && right != null) return false;
911+
else if(left != null && right == null ) return false;
912+
else if(left == null && right == null) return true;
913+
else if(left.val != right.val) return false;
914+
915+
var outside = Compare(left.left, right.right);
916+
var inside = Compare(left.right, right.left);
917+
918+
return outside&&inside;
919+
}
920+
```
921+
``` C#
922+
// 迭代法
923+
public bool IsSymmetric(TreeNode root)
924+
{
925+
if (root == null) return true;
926+
var st = new Stack<TreeNode>();
927+
st.Push(root.left);
928+
st.Push(root.right);
929+
while (st.Count != 0)
930+
{
931+
var left = st.Pop();
932+
var right = st.Pop();
933+
if (left == null && right == null)
934+
continue;
935+
936+
if ((left == null || right == null || (left.val != right.val)))
937+
return false;
938+
939+
st.Push(left.left);
940+
st.Push(right.right);
941+
st.Push(left.right);
942+
st.Push(right.left);
943+
}
944+
return true;
945+
}
946+
```
900947

901948
<p align="center">
902949
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

‎problems/0102.二叉树的层序遍历.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,32 @@ impl Solution {
462462
}
463463
}
464464
```
465+
### C#
466+
```C#
467+
public IList<IList<int>> LevelOrder(TreeNode root)
468+
{
469+
var res = new List<IList<int>>();
470+
var que = new Queue<TreeNode>();
471+
if (root == null) return res;
472+
que.Enqueue(root);
473+
while (que.Count != 0)
474+
{
475+
var size = que.Count;
476+
var vec = new List<int>();
477+
for (int i = 0; i < size; i++)
478+
{
479+
var cur = que.Dequeue();
480+
vec.Add(cur.val);
481+
if (cur.left != null) que.Enqueue(cur.left);
482+
if (cur.right != null) que.Enqueue(cur.right);
483+
}
484+
res.Add(vec);
485+
486+
487+
}
488+
return res;
489+
}
490+
```
465491

466492

467493
**此时我们就掌握了二叉树的层序遍历了,那么如下九道力扣上的题目,只需要修改模板的两三行代码(不能再多了),便可打倒!**
@@ -798,6 +824,31 @@ impl Solution {
798824
}
799825
}
800826
```
827+
### C#
828+
```C#
829+
public IList<IList<int>> LevelOrderBottom(TreeNode root)
830+
{
831+
var res = new List<IList<int>>();
832+
var que = new Queue<TreeNode>();
833+
if (root == null) return res;
834+
que.Enqueue(root);
835+
while (que.Count != 0)
836+
{
837+
var size = que.Count;
838+
var vec = new List<int>();
839+
for (int i = 0; i < size; i++)
840+
{
841+
var cur = que.Dequeue();
842+
vec.Add(cur.val);
843+
if (cur.left != null) que.Enqueue(cur.left);
844+
if (cur.right != null) que.Enqueue(cur.right);
845+
}
846+
res.Add(vec);
847+
}
848+
res.Reverse();
849+
return res;
850+
}
851+
```
801852

802853
## 199.二叉树的右视图
803854

‎problems/0104.二叉树的最大深度.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,61 @@ impl Solution {
10221022
max_depth
10231023
}
10241024
```
1025+
### C#
1026+
```C#
1027+
// 递归法
1028+
public int MaxDepth(TreeNode root) {
1029+
if(root == null) return 0;
1030+
1031+
int leftDepth = MaxDepth(root.left);
1032+
int rightDepth = MaxDepth(root.right);
1033+
1034+
return 1 + Math.Max(leftDepth, rightDepth);
1035+
}
1036+
```
1037+
```C#
1038+
// 前序遍历
1039+
int result = 0;
1040+
public int MaxDepth(TreeNode root)
1041+
{
1042+
if (root == null) return result;
1043+
GetDepth(root, 1);
1044+
return result;
1045+
}
1046+
public void GetDepth(TreeNode root, int depth)
1047+
{
1048+
result = depth > result ? depth : result;
1049+
if (root.left == null && root.right == null) return;
1050+
1051+
if (root.left != null)
1052+
GetDepth(root.left, depth + 1);
1053+
if (root.right != null)
1054+
GetDepth(root.right, depth + 1);
1055+
return;
1056+
}
1057+
```
1058+
```C#
1059+
// 迭代法
1060+
public int MaxDepth(TreeNode root)
1061+
{
1062+
int depth = 0;
1063+
Queue<TreeNode> que = new();
1064+
if (root == null) return depth;
1065+
que.Enqueue(root);
1066+
while (que.Count != 0)
1067+
{
1068+
int size = que.Count;
1069+
depth++;
1070+
for (int i = 0; i < size; i++)
1071+
{
1072+
var node = que.Dequeue();
1073+
if (node.left != null) que.Enqueue(node.left);
1074+
if (node.right != null) que.Enqueue(node.right);
1075+
}
1076+
}
1077+
return depth;
1078+
}
1079+
```
10251080

10261081
<p align="center">
10271082
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

‎problems/0226.翻转二叉树.md

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,25 +1018,13 @@ public class Solution {
10181018
```csharp
10191019
//迭代
10201020
public class Solution {
1021-
public TreeNode InvertTree(TreeNode root) {
1022-
if (root == null) return null;
1023-
Stack<TreeNode> stack=new Stack<TreeNode>();
1024-
stack.Push(root);
1025-
while(stack.Count>0)
1026-
{
1027-
TreeNode node = stack.Pop();
1028-
swap(node);
1029-
if(node.right!=null) stack.Push(node.right);
1030-
if(node.left!=null) stack.Push(node.left);
1031-
}
1032-
return root;
1033-
}
1034-
1035-
public void swap(TreeNode node) {
1036-
TreeNode temp = node.left;
1037-
node.left = node.right;
1038-
node.right = temp;
1039-
}
1021+
public TreeNode InvertTree(TreeNode root) {
1022+
if(root == null) return root;
1023+
(root.left,root.right) = (root.right, root.left);
1024+
InvertTree(root.left);
1025+
InvertTree(root.right);
1026+
return root;
1027+
}
10401028
}
10411029
```
10421030

‎problems/二叉树的统一迭代法.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,99 @@ impl Solution{
741741
}
742742
}
743743
```
744+
### C#
745+
```C#
746+
// 前序遍历
747+
public IList<int> PreorderTraversal(TreeNode root)
748+
{
749+
var res = new List<int>();
750+
var st = new Stack<TreeNode>();
751+
if (root == null) return res;
752+
st.Push(root);
753+
while (st.Count != 0)
754+
{
755+
var node = st.Peek();
756+
if (node == null)
757+
{
758+
st.Pop();
759+
node = st.Peek();
760+
st.Pop();
761+
res.Add(node.val);
762+
}
763+
else
764+
{
765+
st.Pop();
766+
if (node.right != null) st.Push(node.right);
767+
if (node.left != null) st.Push(node.left);
768+
st.Push(node);
769+
st.Push(null);
770+
}
771+
}
772+
return res;
773+
}
774+
```
775+
```C#
776+
// 中序遍历
777+
public IList<int> InorderTraversal(TreeNode root)
778+
{
779+
var res = new List<int>();
780+
var st = new Stack<TreeNode>();
781+
if (root == null) return res;
782+
st.Push(root);
783+
while (st.Count != 0)
784+
{
785+
var node = st.Peek();
786+
if (node == null)
787+
{
788+
st.Pop();
789+
node = st.Peek();
790+
st.Pop();
791+
res.Add(node.val);
792+
}
793+
else
794+
{
795+
st.Pop();
796+
if (node.right != null) st.Push(node.right);
797+
st.Push(node);
798+
st.Push(null);
799+
if (node.left != null) st.Push(node.left);
800+
}
801+
}
802+
return res;
803+
}
804+
```
805+
806+
```C#
807+
// 后序遍历
808+
public IList<int> PostorderTraversal(TreeNode root)
809+
{
810+
var res = new List<int>();
811+
var st = new Stack<TreeNode>();
812+
if (root == null) return res;
813+
st.Push(root);
814+
while (st.Count != 0)
815+
{
816+
var node = st.Peek();
817+
if (node == null)
818+
{
819+
st.Pop();
820+
node = st.Peek();
821+
st.Pop();
822+
res.Add(node.val);
823+
}
824+
else
825+
{
826+
st.Pop();
827+
if (node.left != null) st.Push(node.left);
828+
if (node.right != null) st.Push(node.right);
829+
st.Push(node);
830+
st.Push(null);
831+
}
832+
}
833+
res.Reverse(0, res.Count);
834+
return res;
835+
}
836+
```
744837

745838
<p align="center">
746839
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

‎problems/二叉树的迭代遍历.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,67 @@ impl Solution {
695695
}
696696
}
697697
```
698+
### C#
699+
```C#
700+
// 前序遍历
701+
public IList<int> PreorderTraversal(TreeNode root)
702+
{
703+
var st = new Stack<TreeNode>();
704+
var res = new List<int>();
705+
if (root == null) return res;
706+
st.Push(root);
707+
while (st.Count != 0)
708+
{
709+
var node = st.Pop();
710+
res.Add(node.val);
711+
if (node.right != null)
712+
st.Push(node.right);
713+
if (node.left != null)
714+
st.Push(node.left);
715+
}
716+
return res;
717+
}
718+
719+
// 中序遍历
720+
public IList<int> InorderTraversal(TreeNode root)
721+
{
722+
var st = new Stack<TreeNode>();
723+
var res = new List<int>();
724+
var cur = root;
725+
while (st.Count != 0 || cur != null)
726+
{
727+
if (cur != null)
728+
{
729+
st.Push(cur);
730+
cur = cur.left;
731+
}
732+
else
733+
{
734+
cur = st.Pop();
735+
res.Add(cur.val);
736+
cur = cur.right;
737+
}
738+
}
739+
return res;
740+
}
741+
// 后序遍历
742+
public IList<int> PostorderTraversal(TreeNode root)
743+
{
744+
var res = new List<int>();
745+
var st = new Stack<TreeNode>();
746+
if (root == null) return res;
747+
st.Push(root);
748+
while (st.Count != 0)
749+
{
750+
var cur = st.Pop();
751+
res.Add(cur.val);
752+
if (cur.left != null) st.Push(cur.left);
753+
if (cur.right != null) st.Push(cur.right);
754+
}
755+
res.Reverse(0, res.Count());
756+
return res;
757+
}
758+
```
698759

699760
<p align="center">
700761
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /